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