内存的五个分区

来源:互联网 发布:网络信息点测试 编辑:程序博客网 时间:2024/05/17 09:17

内存包括5个区域:

1.栈区

系统分配以及回收内存,函数体内创建的变量分配在栈区。

例如:

int main()

{

int a  = 10;

int b = 2;

}

a存在内存的栈区,系统分配了一个四个字节的空间,里面存放了一个数字10,出了这个大括号,系统就会回收a所占的内存空间,同理b也是在栈区。


2.堆区(动态内存分配)

由用户(程序员)分配回收,如果忘记回收,那么就会造成内存泄露,内存越用越少,有可能导致内存不够用,造成系统崩溃,如果没有达到极限,程序还是会没事,当程序退出时系统会来回收一次。

申请内存时用malloc来申请, 申请后要用free来释放掉

3.常量区

用来存放常量的内存区域

int main()

{

int a  = 10;

int b = 2;

}

10 和2 存在常量区, a = 10中栈区的10是由常量区中的10拷贝过来的,也就是有两个10,常量区中存放的一般是数值,字符和字符串。


4.全局静态区

定义在函数体外面的变量,由系统开辟空间,程序运行过程中一直存在,直到系统退出

int x = 8;

int main()

{

int a  = 10;

int b = 2;

}

在函数外面定义的x就是存在全局静态区的,它的生命周期随着程序打开就开始分配存在,在程序退出时结束,这里的x = 8,8也是从常量区拷过来的 ,像所学的oc里的类就是存在全局静态区的。


5.代码区

存放源代码编译结果的区域


我们平时写的代码是源代码,例如 int a = 10; 源代码计算机是读不懂的,计算机只能读懂二进制,由0 和1 组成的序列。我们要对源代码进行编译,编译成二进制文件,如果是Windows系统运行会生成.exe文件, 如果是mac系统就会生成.app文件, 我们所写的所有函数编译成二进制之后就放在代码区。

0 0
原创粉丝点击