首页 > 编程语言 > 详细

C++中的堆和栈

时间:2021-08-22 21:19:00      阅读:12      评论:0      收藏:0      [点我收藏+]

1. 堆和栈有什么区别

从定义上:堆是由new和malloc开辟的一块内存,由程序员手动管理,栈是编译器自动管理的内存,存放函数的参数和局部变量。

堆空间因为会有频繁的分配释放操作,会产生内存碎片

堆的生长空间向上,地址越来越大,栈的生长空间向下,地址越来越小

关于c++内存空间的构成,大家可以看我这篇文章

C++内存管理机制

2. 堆快一点还是栈快一点?

栈快一点。因为操作系统会在底层对栈提供支持,会分配专门的寄存器存放栈的地址,栈的入栈出栈操作也十分简单,并且有专门的指令执行,所以栈的效率比较高也比较快。而堆的操作是由C/C++函数库提供的,在分配堆内存的时候需要一定的算法寻找合适大小的内存。并且获取堆的内容需要两次访问,第一次访问指针,第二次根据指针保存的地址访问内存,因此堆比较慢。

3. new和delete是如何实现的

在new一个对象的时候,首先会调用malloc为对象分配内存空间,然后调用对象的构造函数。delete会调用对象的析构函数,然后调用free回收内存。

new与malloc都会分配空间,但是new还会调用对象的构造函数进行初始化,malloc需要给定空间大小,而new只需要对象名

C++中的堆和栈

原文:https://www.cnblogs.com/wanghongyang/p/15172848.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!