C++中,内存分为5个区:堆、栈、自由存储区、全局/静态存储区和常量存储区。
(注意:堆和自由存储区其实不过是同一块区域,new底层实现代码中调用了malloc,new可以看成是malloc智能化的高级版本)
一. 堆与栈的讨论:
二. 程序示例
通过下面的程序可以更好的对上面的概念进行理解。
int b; //main.cpp int a = 0; //全局初始化区 char *p1; //全局未初始化区 main(){int b; //栈 char s[] = "abc"; // 栈 char *p2; //栈 char *p3 = "123456"; // 123456/0在常量区,p3在栈上。 static int c = 0; // 全局(静态)初始化区 p1 = (char *)malloc(10) p2 = (char *)malloc(20) // 分配得来得10和20字节的区域就在堆区。 strcpy(p1, "123456"); // 123456/0放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。 }
小结:
堆和栈的区别可以用如下的比喻来看出:
使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。(经典!)
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对<计算机技术网(www.ctvol.com)!!>的支持。如果你想了解更多相关内容请查看下面相关链接
—-想了解C++堆和栈的区别与联系讲解分享!全部内容且更多的C语言教程关注<计算机技术网(www.ctvol.com)!!>
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/482912.html