这里只看最简单的几种类型变量在内存段的存放位置,详细可参考《程序员自我修养》。代码如下:
#include <stdio.h>
#include <stdlib.h>
/*
bss段(Block Started by symbol),存放未初始化及初始化为0的(static)全局变量、未初始化及初始化为0局部静态变量。
data段,存放初始化的全局变量或局部静态变量(初始化非0) 、常量字符串
rodata段,也叫常量区,用于存放常量数据 。
*/
int gValueUninit;
int gValueInit0 = 0;
int gValueInitNot0 = 1;
const int gValueConst = 100;
const char *gStrConst = "test";
static int gValueStatic;
static int gValueStaticInit = 10;
int main()
{
static int sLocalValueInit = 10;
static int sLocalValueInit0 = 0;
static int sLocalValueNotInit;
return 0;
}
代码中定义了全局(const 或 static)变量、局部static 变量,它们各存放在哪些内存段中呢?首先可以用 nm 命令查看符号信息,如:

man nm 可得:

同时,也可以用 objdump -x 命令查看对象信息,如:

本文探讨了C程序中全局和局部静态变量在内存中的分布,包括bss段(存放未初始化或初始化为0的变量)、data段(存放已初始化的变量)以及rodata段(存放常量)。通过nm和objdump-x命令,可以查看这些变量在程序内存布局中的位置。
1672

被折叠的 条评论
为什么被折叠?



