静态存储区堆和栈的区别

上传人:学**** 文档编号:301773449 上传时间:2022-05-31 格式:DOCX 页数:3 大小:16.37KB
返回 下载 相关 举报
静态存储区堆和栈的区别_第1页
第1页 / 共3页
静态存储区堆和栈的区别_第2页
第2页 / 共3页
静态存储区堆和栈的区别_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《静态存储区堆和栈的区别》由会员分享,可在线阅读,更多相关《静态存储区堆和栈的区别(3页珍藏版)》请在金锄头文库上搜索。

1、本文格式为Word版,下载可任意编辑静态存储区堆和栈的区别 静态存储区、堆和栈的识别 一、内存根本构成 可编程内存在根本上分为这样的几大片面:静态存储区、堆区和栈区。他们的功能不同,对他们使用方式也就不同。 静态存储区:内存在程序编译的时候就已经调配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。 栈区:在执行函数时,函数内局部变量的存储单元都可以在栈上创造,函数执行终止时这些存储单元自动被释放。栈内存调配运算内置于处理器的指令集中,效率很高,但是调配的内存容量有限。 堆区:亦称动态内存调配。程序在运行的时候用malloc或new申请任意大小的内存,程序员自己负责在

2、适当的时候用free或delete释放内存。动态内存的生存期可以由我们抉择,假设我们不释放内存,程序将在结果才释放掉动态内存。 但是,良好的编程习惯是:假设某动态内存不再使用,需要将其释放掉,否那么,我们认为发生了内存泄漏现象。 二、三者之间的识别 我们通过代码段来看看对这样的三片面内存需要怎样的操作和不同,以及理应留神怎样的地方。 例一:静态存储区与栈区 char* p = “Hello World1”; char a = “Hello World2”; p2 = A ; a2 = A ; char* p1 = “Hello World1;” 这个程序是有错误的,错误发生在p2 = A 这行

3、代码处,为什么呢,是变量p和变量数组a都存在于栈区的(任何临时变量都是处于栈区的,包括在main()函数中定义的变量)。但是,数据“Hello World1”和数据“Hello World2”是存储于不同的区域的。 由于数据“Hello World2”存在于数组中,所以,此数据存储于栈区,对它修改是没有任何问题的。由于指针变量p仅仅能够存储某个存储空间的地址,数据“Hello World1”为字符串常量,所以存储在静态存储区。虽然通过p2可以访问到静态存储区中的第三个数据单元,即字符 l 所在的存储的单元。但是由于数据“Hello World1”为字符串常量,不成以变更,所以在程序运行时,会报告内存错误。并且,假设此时对p和p1输出的时候会察觉p和p1里面保存的地址是完全一致的。换句话说,在数据区只留存一份一致的数据(见图11)。 例二:栈区与堆区 char* f1() char* p = NULL; char a; 3

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号