C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > c++堆和栈

C++堆和栈的区别与联系讲解

作者:yangyongUestc

今天小编就为大家分享一篇关于C++堆和栈的区别与联系讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

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"优化成一个地方。
}

小结:

堆和栈的区别可以用如下的比喻来看出:

使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。(经典!)

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

您可能感兴趣的文章:
阅读全文