当我们编码的时候我们的源程序一般都放在硬盘上,然后当我们使用这个程序时电脑就会在内存上运行这个程序,然而电脑内存资源是十分紧缺的,一般电脑内存都是4g,8g,2g。。所以当我们运行程序时并不是直接在内存上运行,而是在内存产生的虚拟地址空间上先进行,该虚拟空间一般也是4g,8g....。
这就涉及到了虚拟空间的内存划分了.
以4g为例:
首先在虚拟空间的高地址存放内核,内核是操作系统最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间。内核的分类可分为单内核和双内核以及微内核。因为内核十分重要所以分配内存1g专门存放
然后剩下的3g内存就是用来存放用户自己的相关数据了:
在它下方并且紧挨着内核存放区域的就是栈空间:
数据类型; 用来存放局部变量,函数形参和自动变量(近期的版本已经很少使用自动变量这个概念了);
栈空间的特点; 存放数据时遵循先进后出的原则,(即先存放进栈空间的数据在取出时在后面取出,这些都是由系统管理的);
再下方就是堆空间:
类型:主要是给malloc,calloc,ralloc 分配空间
堆空间的特点:遵循先进先出的原则,可以由用户自己进行管理;
再下方是全局数据区(也叫数据区)
这一区域主要有三个部分组成:
1.bss : 存放未初始化的全局变量;
2.ordata:存放常量;
3.静态数据区:存放初始化的全局变量以及static修饰的变量;
最下方存放的则是代码段:
存放的当然就是代码了。。