您的位置:首页 > 编程语言 > C语言/C++

C语言变量存储区域 进程内存布局

2015-08-28 15:54 555 查看
更加详细的进程内存布局可以查看 http://blog.csdn.net/yusiguyuan/article/details/45155035
一个进程的内存通常分为几个大区:共享存储区、栈区、堆区、全局静态区、文字常量区,此外还有程序代码区,其中,全局静态区又可以分为全局非初始化区和全局初始化区,从具体程序中来看,初始化和非初始化的全局OR全局静态OR局部静态变量,其地址相差并不远,但还是可以看到明显的非初始化和初始化有分隔。
关于初始化和非初始化的问题,我们一般认为全局变量、static变量在不显示初始化时都会默认初始化,这是肯定的,而在gcc测试时,局部变量未显示初始化,也会自动默认初始化为0,可能是编译器已经做了这方面的优化。

共享存储区是在测试IPC通信shmget发现的,在我的机器上,其地址与最高的栈区相差甚远,还在很高的地址上。
栈区存储局部非static变量甚至局部const变量,局部static变量不在这里存储。
堆区用于存储用malloc等动态申请了空间的变量。
全局静态区存储全局变量、static变量不管局部还是全局,全局const变量未显示初始化则会存放在这个区中,不会存放在常量区。这个区域还明显分开了初始化的和未初始化的两块区域。
文字常量区存放初始化的全局const、字符串字面量。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: