未初始化的静态变量始终在BSS中分配。虽然.bss节是静态的,因为在编译时分配内存。 在许多书籍中,“可执行文件中只有初始化为非零值的变量才占用空间”。 将程序加载到内存后,未初始化的静态变量仍然是.bss。初始化时内存将分配给“未初始化的静态变量”吗?
**函数初始化时会发生什么? ** 它会移动到其他地区吗?
未初始化的静态变量始终在BSS中分配。虽然.bss节是静态的,因为在编译时分配内存。 在许多书籍中,“可执行文件中只有初始化为非零值的变量才占用空间”。 将程序加载到内存后,未初始化的静态变量仍然是.bss。初始化时内存将分配给“未初始化的静态变量”吗?
**函数初始化时会发生什么? ** 它会移动到其他地区吗?
初始化时,内存分配给“未初始化的静态变量”,这被移动到.data段
代码文件:
int a,b,c;
int main()
{
a=1;
b=2;
c=3;
scanf("%d",a);
}
执行:
# size a.out
text data bss dec hex filename
1318 284 16 1618 652 a.out
# size core.18521
text data bss dec hex filename
28672 180224 0 208896 33000 core.18521 (core file invoked as ./a.out)
因此,它将移至.data节。 –
.bss不占用可执行文件中的空间。当程序启动.bss被分配并填充0时,所有未初始化的对象都位于那里。所以当你初始化内存被分配的变量时。
报价的休息:
“在可执行文件,只有被初始化为非零值的变量占用的空间。”
I.E.当可执行文件被加载到内存中,所需要的空间分配
仔细考虑您的意译:“正在初始化*为非零值*占用空间只有变量”(强调)有关变量的初始化什么归零?这些可以在没有进一步初始化的情况下使用,所以你明显的解释是运行时初始化必须改变有关空间分配的事情。正如其他人指出的那样,您所提到的声明是关于可执行文件*,而不是关于正在运行的程序在内存中的映像。 –
“未初始化的静态变量始终在BSS中分配”并非总是如此 –