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

原创 2016年08月31日 12:08:38
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) |
给主人留下些什么吧!~~
评论热议
版权声明:本文为博主原创文章,转载请注明出处。

const、static变量存放位置

我们将以下面的例子介绍const变量和static变量的存放位置:static int val_a = 1 ; // 初始化的静态变量 int val_b = 2 ; // 全局变量...
  • gao1440156051
  • gao1440156051
  • 2016年03月29日 09:58
  • 3351

const,static,全局变量细节及其区别

const: 限制符号,限制某个变量所指向的内容不能通过这个对象修改。 但是可以通过其他的修改,比如: int main(){ int x=5; const int &y=x; x+...
  • u014403897
  • u014403897
  • 2015年05月22日 15:33
  • 2262

c语言程序的存储区域与const关键字的使用方法

一.C语言程序的存储区域 1.由C语言代码(文本文件)形成可执行程序(二进制文件),需要经过编译-汇编-连接三个阶段。编译过程把C语言文本文件生成汇编程序,汇编过程把汇编程序形成二进制机器代码,...
  • qq_21792169
  • qq_21792169
  • 2016年01月22日 14:09
  • 29994

Static Variable, Auto Variable, Global Variable, Local Variable, Register Variable (C)

变量的作用域: (1)局部变量: 即在函数内部定义的变量,形式参数也属于局部变量。局部变量只在定义它的函数内部有效。 (2)全局变量: 即所有函数外部定义的变量,其作用范围是从定义变量的位置开始到...
  • kerin_lu
  • kerin_lu
  • 2014年07月16日 10:27
  • 602

徐彤教程-C++编程const与static第0260讲:实例01-静态成员变量

  • 2016年01月13日 22:01
  • 1.31MB
  • 下载

应该尽量使用 local 变量而非 global 变量

量名作 key) 去访问这个 table 。虽然Lua5 的 table 效率很高 ,但是相对于 local 变量,依然有很大的效率损失。local 变量是直接通过 Lua 的堆栈访问的。有些 g...
  • linuxheik
  • linuxheik
  • 2014年09月06日 00:40
  • 382

php函数,static,global关键字及三种变量作用域

函数和js函数类似,关注php与其他语言不用的地方 函数的形参默认值形式:function f($a,$b=3,$vc = "abc"){} 注意:没有给默认值的形参必须传递值, 形参的传值问题一句话...
  • ydxlt
  • ydxlt
  • 2016年01月25日 16:48
  • 2959

徐彤教程-C++编程const与static第0262讲:实例03-const成员变量

  • 2016年01月13日 23:48
  • 669KB
  • 下载

[29期] 浅谈global和$GLOBALS,&amp;引用,static变量和常量

作为PHP的新手,讲到函数这部分,在这几个定义上有些许模糊的认识,就我所了解的,写下来,供大家交流,有错误之处,望大家回贴指正. 按正常逻辑分类说起: global与$GLOBALS:gl...
  • u011886490
  • u011886490
  • 2013年08月30日 14:10
  • 475

non-local static 变量初始化顺序不确定,带来的问题

    所谓static对象,其寿命从被构造出来直到程序结束为止,因此stack和heap-based对象都被排除。这种对象包括global对象、定义于namespace作用域内的对象,classes...
  • zicheng_lin
  • zicheng_lin
  • 2011年04月08日 15:59
  • 2373
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux下global,static,const,local变量存放区域
举报原因:
原因补充:

(最多只允许输入30个字)