首页 > 代码库 > 内存四区模型
内存四区模型
注:一个程序只建立一个内存四区,所有函数共用这个内存四区。
内存四区如下:
一、全局区
全局变量和静态变量的存储是放在一起的,初始化的全局变量和静态变量在一块区域,
未初始化的全局变量和未初始化的静态变量在相邻的另一块区域,
该区域在程序结束后由操作系统释放;
常量区——字符串常量和其他常量的存储位置,程序结束后由操作系统释放。
在代码运行期间,C编译器会做优化处理,
1)、当定义两个不同字符串时,全局区会开辟两个内存空间存放字符串,
2)、当定义两个相同的字符串时,全局区只开辟一个内存空间,变量共用这个内存空间。
二、堆
一般由程序员分配释放(动态内存申请与释放),若程序员不释放,程序结束时可能有操作系统回收;
函数内部动态分配内存空间,其他函数可以使用,因为在该函数运行结束后,这片内存空间不被释放。
三、栈(临时区)
由编译器自动分配释放,存放函数的参数值,局部变量的值等;
函数内部静态分配内存空间,其他函数不能使用,因为在该函数运行结束后,这片内存空间被释放掉了。
四、代码区
存放函数的二进制代码;
栈区开口朝向问题:
#include <stdio.h>void main(void){ int i=10; int j=10; printf("i-->%d;\n",&i); printf("j-->%d;\n",&j); if((&i-&j)>0){ printf("开口朝下;\n"); }else if ((&i-&j)<0){ printf("开口朝上;\n"); }else{ printf("error;\n"); } return ;}
无论栈区开口朝上还是朝下,栈区内的数组内存空间的开头地址都是最下面的,如图:
内存四区模型
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。