首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么ELF中外部变量的大小是0?

为什么ELF中外部变量的大小是0?
EN

Stack Overflow用户
提问于 2019-06-06 11:48:13
回答 1查看 159关注 0票数 3

C程序中变量的外部声明会导致ELF中的大小为0。在已知的情况下,为什么实际大小不存储在ELF中?对于像不完整数组这样的情况,我知道没有大小信息,但对于其他情况,应该可以存储大小。

我尝试了一些简单的代码,并在ELF中验证发出的大小为零。

代码语言:javascript
运行
复制
// file1.c

extern int var;
int main()
{
    var = 2;
}
代码语言:javascript
运行
复制
// file 2.c
long long int var = 8;
代码语言:javascript
运行
复制
gcc -c file1.c
readelf -s file1.o
...
9: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND var
...
代码语言:javascript
运行
复制
gcc -c file2.c
readelf -s file2.o
...
7: 0000000000000000     8 OBJECT  GLOBAL DEFAULT    2 var
...

如果在file1.o中var的大小存储为4,则当与file2.o链接时,链接器实际上可以检测到由于大小而导致的潜在不匹配。

那么,为什么不发出size,因为它可以帮助捕获一些像这样的微妙问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-06 11:59:41

file1中,var只是一个占位符。它不会占用任何内存。外部标识符用于向编译器和链接器指示变量var存储在别处。

按照您的建议,为单变量var提供两个存储位置是错误的。

C语言的一个怪癖是,您可以为外部变量定义不同的类型,为底层全局变量定义不同的类型,就像您在示例中所做的那样。这是我们拥有静态分析工具的原因之一。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56470654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档