【发布时间】:2017-09-02 16:32:48
【问题描述】:
未初始化的int 变量will 被放置到.bss 部分。
但如果我添加这样一个变量 - size 的结果中的 bss 部分长度变得更大,变为 8 个字节而不是 4 个 - 为什么会这样?
这是一个例子:
一个未初始化的整数:
#include <stdio.h>
int a;
//int b;
int main () {
printf("A size: %d\n", sizeof(a));
// printf("B size: %d\n", sizeof(b));
return 0;
}
size 的结果:
$ gcc int_szie.c -o int_szie $ size int_szie text data bss dec hex filename 1483 536 8 2027 7eb int_szie
取消注释 b var - 现在 bss 是 16 个字节:
...
int a;
int b;
int main () {
printf("A size: %d\n", sizeof(a));
printf("B size: %d\n", sizeof(b));
return 0;
...
$ gcc int_szie.c -o int_szie $ size int_szie text data bss dec hex filename 1628 592 16 2236 8bc int_szie
sizeof() 结果:
$ ./int_szie A size: 4 B size: 4
我什至不敢问为什么data 部分在整个 56 个字节上变得更大:
数据 536
对比:
数据 592
gcc:
$ gcc --version gcc (GCC) 7.1.1 20170630
【问题讨论】:
-
为避免因使用不匹配的说明符/类型(即 UB)而分心,请使用
printf("A size: %zu\n", sizeof(a));或printf("A size: %d\n", (int) sizeof(a));