这里只看最简单的几种类型变量在内存段的存放位置,详细可参考《程序员自我修养》。代码如下:
#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 命令查看对象信息,如: