可以通过从rbp中减去从x86_64释放堆栈内存吗?

时间:2016-03-26 16:48:14

标签: stack nasm dynamic-memory-allocation

标题几乎说明了。我正在编写一个算法(现在将其移植到nasm中),需要分配大量(超过8gb)的ram(作为cpu使用的严格权衡)。在每次迭代中,它都将一个int存储到堆栈中(用于输出和以后的使用)。然后,它可以定期释放一组值,但只能从堆栈的底部释放。这可以通过简单地减少堆栈基数(rbp)来完成吗?

1 个答案:

答案 0 :(得分:0)

堆栈是堆栈。您可以在顶部推送和弹出值,但仅此而已。你不能以任何其他方式从中取消分配任何东西。

更改RBP不会执行任何操作,它只是用于当前堆栈帧的辅助寄存器。 RSP显示堆栈的当前顶部,并且移动该更改将在堆栈内存储或检索下一个值的位置。因此,如果需要,您可以从顶部删除一堆值,但不能从底部删除。

如果您需要临时存储值并稍后释放它们,那么循环缓冲区或常规内存块将更适合它。