我编写了下面这个简单的C程序(test.c):-
输出结果如下:
但令我惊讶的是,输出结果与之前相同:-
请解释。 然后我初始化了全局变量:-
数据段的大小按预期增加,但我没想到bss段的大小会减少到4(与未声明时的8相反)。请解释。
我也尝试了objdump和nm命令,但它们也显示变量x占用.bss(在第2种情况下)。然而,size命令没有显示bss大小的变化。
我按照以下步骤进行操作: http://codingfox.com/10-7-memory-segments-code-data-bss/ 输出结果与预期完全相符。
#include<stdio.h>
int main()
{
return 0;
}
执行以下命令以了解.bss段的大小变化。
gcc test.c -o test
size test
输出结果如下:
text data bss dec hex filename
1115 552 8 1675 68b test
我没有声明任何全局变量或静态作用域的变量。所以请解释一下为什么bss段的大小是8字节。
我做了以下更改:
#include<stdio.h>
int x; //declared global variable
int main()
{
return 0;
}
但令我惊讶的是,输出结果与之前相同:-
text data bss dec hex filename
1115 552 8 1675 68b test
请解释。 然后我初始化了全局变量:-
#include<stdio.h>
int x=67; //initialized global variable
int main()
{
return 0;
}
数据段的大小按预期增加,但我没想到bss段的大小会减少到4(与未声明时的8相反)。请解释。
text data bss dec hex filename
1115 556 4 1675 68b test
我也尝试了objdump和nm命令,但它们也显示变量x占用.bss(在第2种情况下)。然而,size命令没有显示bss大小的变化。
我按照以下步骤进行操作: http://codingfox.com/10-7-memory-segments-code-data-bss/ 输出结果与预期完全相符。
#include<stdio.h> int main(){ printf("Hello world\n"); return 0; }
- Dr. Essen_start
函数作为代码的入口点。 - LPs