C++堆和栈是什么意思_.docx
《C++堆和栈是什么意思_.docx》由会员分享,可在线阅读,更多相关《C++堆和栈是什么意思_.docx(5页珍藏版)》请在三一文库上搜索。
1、C+堆和栈是什么意思_ 一、预备学问-程序的内存安排 一个由c/C+编译的程序占用的内存分为以下几个部分 1、栈区(stack)- 由编译器自动安排释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) - 一般由程序员安排释放, 若程序员不释放,程序结束时可能由OS回收 .留意它与数据结构中的堆是两回事,安排方式倒是类似于链表,呵呵。 3、全局区(静态区)(static)-,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局 变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放 4、文字常量
2、区 -常量字符串就是放在这里的。 程序结束后由系统释放 5、程序代码区-存放函数体的二进制代码。 二、例子程序 这是一个前辈写的,特别具体 /main.cpp int a = 0; 全局初始化区 char *p1; 全局未初始化区 main() int b; 栈 char s = abc; 栈 char *p2; 栈 char *p3 = 123456; 123456在常量区,p3在栈上。 static int c =0; 全局(静态)初始化区 p1 = (char *)malloc(10); p2 = (char *)malloc(20); 安排得来得10和20字节的区域就在堆区。 strc
3、py(p1, 123456); 123456放在常量区,编译器可能会将它与p3所指向的123456优化成一个地方。 三、堆和栈的理论学问 2.1申请方式 stack: 由系统自动安排。 例如,声明在函数中一个局部变量 int b; 系统自动在栈中为b开发空间 heap: 需要程序员自己申请,并指明大小,在c中malloc函数 如p1 = (char *)malloc(10); 在C+中用new运算符 如p2 = (char *)malloc(10); 但是留意p1、p2本身是在栈中的。 2.2 申请后系统的响应 栈:只要栈的剩余空间大于所申请空间,系统将为程序供应内存,否则将报特别提示栈溢出。
4、 堆:首先应当知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时, 会遍历该链表,查找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间安排给程序,另外,对于大多数系统,会在这块内存空间中的首地址处记录本次安排的大小,这样,代码中的delete语句才能正确的释放本内存空间。另外,由于找到的堆结点的大小不肯定正好等于申请的大小,系统会自动的将多余的那部分重新放入空闲链表中。 2.3申请大小的限制 栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的 ,在 WINDOWS
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 是什么意思
链接地址:https://www.31doc.com/p-11650701.html