linux下global,static,const,local变量存放区域

来源:互联网 发布:淘宝订单进度条 编辑:程序博客网 时间:2024/06/06 04:23
linux下,可执行文件格式是ELF格式,程序中数据在逻辑上大致可以分成下面几个大的区域:

Ÿ Text: 执行的指令序列流,是只读内存区(编译期就决定了其内容);.

Ÿ Data: 程序所使用的静态变量和全局变量区(编译期就决定了其内容);

Ÿ Heap: 堆,进程动态申请的内存区,使用new,malloc操作申请的内存;

Ÿ Stack:栈,动态增长和收缩的内存区,函数参数,返回值,调用栈,局部变量存放区域;


其中Data区域其实可以进一步细分为更多section,下面我们具体看看
  1. static int val_a = 1; // 初始化的静态变量
  2. int val_b = 2;        // 全局变量
  3. const int val_c = 3;  // const 全局变量
  4. static int val_d;     // 未初始化的静态变量
  5. int val_e;            // 未初始化的全局变量
  6. int main(int argc, char *argv[])
  7. {
  8.     static int val_f = 5;  //初始化的局部静态变量
  9.     static int val_g;      //未初始化局部静态变量
  10.     int    val_h = 6;      //初始化局部变量
  11.     int    val_i;          //未初始化局部变量
  12.     const  int val_j = 7;  //const局部变量
  13.     return 0;
  14. }

  15. g++ main.cpp -o test

通过objdump命令查看各种变量分布位置
objdump -t -T  test | grep 'val'
000000000060095c l     O .data  0000000000000004              _ZL5val_a
000000000060097c l     O .bss   0000000000000004              _ZL5val_d
0000000000400678 l     O .rodata        0000000000000004      _ZL5val_c
0000000000600980 l     O .bss   0000000000000004              _ZZ4mainE5val_g
0000000000600964 l     O .data  0000000000000004              _ZZ4mainE5val_f
0000000000600960 g     O .data  0000000000000004              val_b
0000000000600978 g     O .bss   0000000000000004              val_e

做一下总结
data 区存放初始化的全局变量和静态变量
bss  区存放未初始化的全局变量和静态变量
rodata 区存放只读的数据,const变量

其中 val_h, val_i,是局部变量,在进程启动main函数执行后,在栈里面分配;
val_j 虽然是const 变量,也是在栈里面分配

<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(470) | 评论(0) | 转发(0) |
0

上一篇:linux下so动态库一些不为人知的秘密(中)

下一篇:android jni 的编写一(JNI的静态注册)

相关热门文章
  • A sample .exrc file for vi e...
  • IBM System p5 服务器 HACMP ...
  • 游标的特征
  • DB2 9 应用开发(733 考试)认...
  • busybox的httpd使用CGI脚本(Bu...
  • linux dhcp peizhi roc
  • 关于Unix文件的软链接
  • 求教这个命令什么意思,我是新...
  • sed -e "/grep/d" 是什么意思...
  • 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~