C++中,内存分为5个区:堆、栈、自由存储区、全局/静态存储区和常量存储区。
(注意:堆和自由存储区其实不过是同一块区域,new底层实现代码中调用了malloc,new可以看成是malloc智能化的高级版本)
一. 堆与栈的讨论:
二. 程序示例
通过下面的程序可以更好的对上面的概念进行理解。
int b; //main.cppint 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"优化成一个地方。}
小结:
堆和栈的区别可以用如下的比喻来看出:
使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度小。使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。(经典!)
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对武林网的支持。如果你想了解更多相关内容请查看下面相关链接
新闻热点
疑难解答
图片精选