我已经被告知很多次了。但我不知道为什么......从堆分配内存时会涉及哪些额外成本?与硬件有关吗?与CPU周期有关吗?这么多的猜测,但没有确切的答案......有人能给我一些详细说明吗?
正如“unwind”所说,Heap数据结构比Stack更复杂。在我看来,当线程开始运行时,一些内存空间会被分配给线程作为其堆栈,而堆则由进程内的所有线程共享。这种范例需要一些额外的机制来管理每个线程对共享堆的使用,例如垃圾收集。我的说法正确吗?
添加 1 - 2022 年 5 月 13 日上午 10:42
堆栈的管理只涉及指令和寄存器(SP、BP),从某种意义上来说,这自然/纯粹是硬件。
而对于堆来说,还涉及到复杂的软件数据结构和算法,其中涉及到函数调用(又涉及到栈)、内存访问等。
硬件速度快,但不如软件灵活。
软件灵活,但不如硬件快。
所以堆并不便宜。
因为堆是一种比栈复杂得多的数据结构。
对于许多体系结构,在堆栈上分配内存只是更改堆栈指针的问题,即它是一条指令。在堆上分配内存涉及寻找足够大的块,将其分割,并管理“簿记”,以允许诸如free()
以不同的顺序。
当作用域(通常是函数)退出时,保证在堆栈上分配的内存被释放,并且不可能只释放其中的一部分。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)