C++-堆和栈访问效率哪个更高

发布于 2016-11-24 00:34:21 字数 81 浏览 1603 评论 6

假如某函数有一个指针参数,函数体会对该指针指向的内容进行一系列处理操作,该指针可能指向堆也可能指向栈,你觉得使用堆还是栈能使这个函数的执行效率较高?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

浮生未歇 2017-10-24 05:10:10

我说说分配效率,栈是机器系统提供的数据结构,计算机会在底层对栈提供支持,而堆是C++函数库提供的,机制比较复杂,所以栈的分配效率比堆的效率高。

虐人心 2017-10-23 08:04:46

1.分配和释放,堆在分配和释放时都要调用函数(MALLOC,FREE),比如分配时会到堆空间去寻找足够大小的空间(因为多次分配释放后会造成空洞),这些都会花费一定的时间,具体可以看看MALLOC和FREE的源代码,他们做了很多额外的工作,而栈却不需要这些。

2.访问时间,访问堆的一个具体单元,需要两次访问内存,第一次得取得指针,第二次才是真正得数据,而栈只需访问一次。另外,堆的内容被操作系统交换到外存的概率比栈大,栈一般是不会被交换出去的。

综上所述,站在操作系统以上的层面来看,栈的效率比堆高。

泛泛之交 2017-08-11 12:24:43

栈快,以下原因:

栈有专门的寄存器,压栈和出栈的指令效率很高,而堆需要由OS动态调度,堆内存可能被OS调度在非物理内存中,或是申请内存不连续,造成碎片过多等问题。
另外,分配方式上,堆都是动态分配的,栈是编译器完成的。栈的分配和堆是不同的,他的动态分配是由编译器进行释放,无需我们手工实现

想挽留 2017-06-13 00:10:33

栈分配的软件优势:
栈分配算法简单,所以高效;堆分配算法相对比较复杂。

栈分配的硬件优势:
主要两点,cache和内存映射。

如果在栈上分配小块内存,因为cache和内存映射已经建立,则效率会非常高,远远优于堆分配。

如果在栈上分配大块内存,在不考虑爆栈的情况下,其实两者效率差不到哪去。因为cache命中和内存映射总是在有限的大小进行的,其在栈中分配的大块内存照样cache不命中,而且映射未建立,所以这样的时间相差其实并不太多。

虐人心 2017-04-29 10:31:51

由于栈和堆使用的都是用户空间的虚拟内存,而且你说那个用法是作为函数参数,通过指针引用。非要说有区别,可能是第一次访问该内存的时候有可能更快些,理由是当你调用函数是,只想的栈内存一定已经加载到物理内存里面了,页表也已经建好了(在该页没有被置换出去的情况下);指向堆的内存不一定已经映射到物理内存,因此需要处理缺页,建立页表。至于指向的内存都已经加载到物理内存的情况,应该没有区别。

浮生未歇 2016-12-19 14:51:46

栈效率更高,因为堆分配分配了之后还要与存储器之间建立映射,而栈分配则是之前就建立好了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文