可以通过减去 rbp 来释放 x86_64 上的堆栈内存吗?
Can one deallocate stack memory on x86_64 by substracting from rbp?
标题说的差不多了。我正在编写一个算法(现在将其移植到 nasm),该算法需要分配大量(超过 8gb)的 ram(作为 cpu 使用的严重权衡)。在每次迭代中,它都会将一个 int 存储到堆栈中(用于输出和以后使用)。然后,它可以周期性地释放一组值,但只能从堆栈底部释放。这可以通过简单地递减堆栈基数 (rbp) 来完成吗?
栈就是栈。您可以在顶部推送和弹出值,但仅此而已。您不能以任何其他方式从中取消分配任何内容。
更改 RBP 没有任何作用,它只是用于当前堆栈帧的辅助寄存器。 RSP 显示堆栈的当前顶部并移动更改下一个值将存储到堆栈或从堆栈中检索的位置。因此,如果需要,您可以从顶部删除一堆值,但不能从底部删除。
如果您需要临时存储值并稍后释放它们,那么循环缓冲区或常规内存块将更适合。
标题说的差不多了。我正在编写一个算法(现在将其移植到 nasm),该算法需要分配大量(超过 8gb)的 ram(作为 cpu 使用的严重权衡)。在每次迭代中,它都会将一个 int 存储到堆栈中(用于输出和以后使用)。然后,它可以周期性地释放一组值,但只能从堆栈底部释放。这可以通过简单地递减堆栈基数 (rbp) 来完成吗?
栈就是栈。您可以在顶部推送和弹出值,但仅此而已。您不能以任何其他方式从中取消分配任何内容。
更改 RBP 没有任何作用,它只是用于当前堆栈帧的辅助寄存器。 RSP 显示堆栈的当前顶部并移动更改下一个值将存储到堆栈或从堆栈中检索的位置。因此,如果需要,您可以从顶部删除一堆值,但不能从底部删除。
如果您需要临时存储值并稍后释放它们,那么循环缓冲区或常规内存块将更适合。