问题描述
- 关于linux内存 数据段和bss段的疑惑???
-
数据段和bss段分别存放 已初始化/未初始化 的全局变量和静态变量。那么,假如bss段的全局变量和静态变量在代码执行中被初始化了,那么会不会被转移到
数据段存储呢???
解决方案
首先我觉得你所说的在执行中被初始化的说法是不正确的,应该叫赋值。
接下来我们看一段代码:
#include <stdio.h>
int a;
int b=10;
int c=11;
int main(void)
{
int d;
int e=12;
return 0;
}
用gcc编译后,(在linux下用命令size,得到如下结果)
text data bss dec hex filename
1115 560 8 1683 693 t10
继续看下面修改后的代码:
#include <stdio.h>
int a;
int a1;
int a2;
int a3;
int b=10;
int c=11;
int main(void)
{
int d;
int e=12;
return 0;
}
再用size命令,你会看到:
text data bss dec hex filename
1115 560 24 1699 6a3 t10
通过这些数据,你应该很容看出bss的大小变化,
而你所说的会不会转移的问题,我想说,程序被编译后,
就只会加载代内存中等待执行,不会转移的。
希望对你有用!
时间: 2025-01-01 01:27:48