我在下面编写了简单的C程序(test.c): -
#include<stdio.h>
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
并执行以下内容以了解.bss段中的大小更改.
gcc test.c -o test
size test
Run Code Online (Sandbox Code Playgroud)
输出结果如下: -
text data bss dec hex filename
1115 552 8 1675 68b test
Run Code Online (Sandbox Code Playgroud)
我没有声明全局或静态范围.所以请解释为什么bss段大小为8个字节.
我做了以下改变: -
#include<stdio.h>
int x; //declared global variable
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但令我惊讶的是,输出与以前相同: -
text data bss dec hex filename
1115 552 8 1675 68b test
Run Code Online (Sandbox Code Playgroud)
请解释.然后我初始化了全球: -
#include<stdio.h>
int x=67; //initialized global variable
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
数据段大小按预期增加,但我没想到bss段的大小会减少到4(相反,当没有声明任何内容时为8).请解释.
text data bss dec hex filename …Run Code Online (Sandbox Code Playgroud) 遇到的错误是:“{”标记之前的预期表达式。为什么会这样呢?
#include <stdio.h>
int main ()
{
struct test
{
char a[100];
int g;
} b[2];
b[0] = {"Maharshi", 5};
b[1] = {"Hello", 6};
printf("%u %u", &b[0], &b[1]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)