为什么堆栈需要额外的内存用于管理,而堆栈不需要?
我读过一篇文章,说在堆上分配的内存需要额外的内存进行管理。
比方说,如果我们试图allocate
200个字节,那么会有额外的8个字节分配给内存管理。
但堆栈不需要这个额外的空间。
我知道堆栈地址从高=>低,但堆低=>高,但为什么堆上需要额外的空间?
堆栈变量被分配为堆栈帧的一部分,它在ret
上消失。 这实际上不是100%免费的; 有一个寄存器用于跟踪堆栈帧的起始位置(x86上的%ebp
),它需要在函数输入时保存并在退出之前恢复; 但它是每个函数而不是每个分配,并且追踪帧基指针不仅仅是用于此目的(特别是,它用于在异常处理期间展开堆栈),所以这是沉没成本。
该堆栈更易于管理(您始终分配/从顶部释放),堆栈已由堆栈指针管理。 这就是为什么需要较少的“行政空间”,而不是基本上可以自由地做任何事的堆。
链接地址: http://www.djcxy.com/p/78759.html上一篇: Why heap needs additional memory for management while stack doesn't?