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 声明为外部全局变量吧,然后在某个源文件里面真正定义。