我听说过这个很多次,但是我不知道为什么...从堆中分配内存涉及哪些额外成本?这与硬件有关吗?与CPU周期有关吗?有很多猜测但没有确切的答案...能否有人给我一些解释呢?
就像“unwind”所说的,堆数据结构比栈更复杂。在我看来,当线程开始运行时,一些内存空间被分配到线程作为它的栈,而堆由进程内的所有线程共享。这种范式需要一些额外的机制来管理每个线程对共享堆的使用,例如垃圾回收。我理解得对吗?
ADD 1 - 10:42 AM 5/13/2022
栈的管理仅涉及指令和寄存器(SP,BP),从某种意义上说,这自然/纯粹是硬件。
而堆则涉及更复杂的软件数据结构和算法,包括函数调用(再次涉及栈)、内存访问等。
硬件快速但不如软件灵活。
软件灵活但不如硬件快速。
所以堆并不便宜。