(精品)C程序的内存分配

上传人:仙*** 文档编号:245087310 上传时间:2024-10-07 格式:PPT 页数:12 大小:262KB
返回 下载 相关 举报
(精品)C程序的内存分配_第1页
第1页 / 共12页
(精品)C程序的内存分配_第2页
第2页 / 共12页
(精品)C程序的内存分配_第3页
第3页 / 共12页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,CC+,程序的内存分配,堆和栈的区别,一、基本概念,1.,栈区(,stack,),由编译器自动分配、释放,存放函数的参数值、局部变量的值等,类似于数据结构中的栈,2.,堆区(,heap,),一般由程序员分配、释放,若程序员不释放,程序结束时可能由,OS,回收。,与数据结构中的堆不同,分配方式类似于链表,3,、初始化数据区,/,静态数据区(,static,),全局变量、静态变量、常量数据的存储,程序结束后由系统释放,4,、未初始化区,常量字符串,程序结束后由系统释放,5,、代码区,存放,CPU,执行的机器指令,可共享、只读的,二、例子程序,/,main.cpp,int,a=0;,(全局初始化区),char*p1;,(全局未初始化区),main(),int,b;,栈,char s=,abc,;,栈,char*p2;,栈,char*p3=123456;,1234560,在常量区,,p3,在栈上。,static,int,c=0,;,全局(静态)初始化区,p1=(char*)malloc(10);,p2=(char*)malloc(20);,分配得来的,10,和,20,字节的区域就在堆区,注意,p1,p2,本身是在栈中的,strcpy(p1,123456);,1234560,放在常量区,编译器可能会将它与,p3,所指向的,“,123456,”,优化成一个地方。,free(p1);,free(p2);,释放堆空间,三、堆和栈的理论知识,3.1,、申请方式,栈区(,stack,),由系统自动分配,堆区(,heap,),需要程序员自己申请,并指明大小。,在,C,中,malloc,函数,在,C+,中用,new,运算符,3.2,、申请后系统的响应,栈区(,stack,):只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。,堆区(,heap,):,记录空闲内存地址的链表,遍历该链表,大于所申请空间的堆结点,该结点的空间分配给程序,3.3,申请大小的限制,栈区(,stack,),栈是向低地址扩展的数据结构,是一块连续的内存区域,栈顶的地址和栈的最大容量是系统预先规定,申请的空间超过栈的剩余空间,,溢出,堆区(,heap,),堆是向高地址扩展的数据结构,是不连续的内存区域,受限于计算机系统中有效的虚拟内存,3.4,堆和栈中的存储方式,(,1,),.,栈区(,stack,),进栈:主函数中后的下一条指令(函数调用语句的下一条可执行语句)的地址,参数(由右往左入栈的),函数中的局部变量(注意静态变量是不入栈的),出栈:局部变量,参数,主函数中的下一条指令,(,2,),.,堆区(,heap,),在堆的,头部,用一个字节存放,堆的大小,由程序员安排,四、小结:栈和堆的区别,(,1,)管理方式不同,(,2,)空间大小不同,(,3,)是否产生碎片,(,4,)增长方向不同,(,5,)分配方式不同,(,6,)分配效率不同,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!