Jimmy Blog

Welcome!

进程内存分配位置分析

参考资料:

堆栈空间

变量分配位置

进程与线程的栈

进程内存结构

分为代码段,数据段,bbs段(全局区、静态区)、堆,栈。如下图:

进程与线程的内存分配

一个进程一个堆,一个线程一个栈。

上限大小

bbs段和堆:虚拟内存大小-内核空间大小(linux 1G windows 2G)。 根据虚拟地址的能力来,上限由实际内存大小限制。32位系统能够有4G的虚拟地址。

栈:根据系统和内核的不同,有2M,4M,8M的。

分配问题

static(全局、非全局):bbs段

全局变量:bbs段

单独的变量,数组(int a, int s[100]):栈

malloc 和 new : 堆

STL容器: 堆

需要注意

全局static与全局变量的区别:

这两者的区别在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。

参考:http://bbs.csdn.net/topics/390626289?page=1

头文件声明普通全局变量不妥,如果多个源文件引用会有重定义错误 一般头文件里面用extern 声明为外部全局变量吧,然后在某个源文件里面真正定义。

comments powered by Disqus