请查看以下程序 -
每个段分配的内存如下(使用Unix上的size命令)-
在全局变量声明后 -
在声明全局变量并将其初始化为10之后-
我的问题是,为什么全局变量“i”在存储在BSS段时占用了8个字节的内存,但在存储在数据段时只占用了4个字节的内存?在BSS段和数据段中为整数分配内存的差异在哪里?
#include <stdio.h>
void main()
{
}
每个段分配的内存如下(使用Unix上的size命令)-
text data bss dec hex filename
1040 484 16 1540 604 try
在全局变量声明后 -
#include <stdio.h>
int i;
void main()
{
}
每个段分配的内存如下(在Unix上使用size命令)。这里变量'i'在BSS中获得了内存(之前是16,现在是24)。
text data bss dec hex filename
1040 484 24 1548 60c try
在声明全局变量并将其初始化为10之后-
#include <stdio.h>
int i=10;
void main()
{
}
每个段分配的内存如下(通过在Unix上使用size命令)
在数据段中变量'i'已经接收到了内存(以前是484,现在是488)-
text data bss dec hex filename
1040 488 16 1544 608 try
我的问题是,为什么全局变量“i”在存储在BSS段时占用了8个字节的内存,但在存储在数据段时只占用了4个字节的内存?在BSS段和数据段中为整数分配内存的差异在哪里?
bss
部分,这应该是一个虚拟部分,仅保存要保留的空间计数器,但根据二进制格式请求对齐。当声明已初始化的变量时,它的初始值存储在数据部分中,使其增加4个字节以适应32位int
。这最终会改变文件映像中后面的bss
部分的位置。如果将对齐间距计算为bss
空间,则该值将更改。 - Frankie_C