【发布时间】:2019-10-11 16:01:33
【问题描述】:
假设我们有以下代码:
void foo() {
char buffer[100];
}
C 中是否有(最好是可移植的)方法从运行时堆栈中释放 buffer(类似于 add esp, 100 在程序集中),在 foo 之前() 返回?
【问题讨论】:
-
执行退出函数时会“从运行时栈中释放”。
-
@goodvibration 添加了说明。
-
可移植的方式是代码对释放
buffer没有任何作用。就程序而言,当函数返回时,buffer将不复存在。实现(即编译器)负责确保任何可能需要的清理,并且 C 代码没有标准/可移植的方式来影响(甚至监控)——唯一的方式是依赖于机器的代码(例如汇编)根据定义,它是不可移植的。如果你需要提供buffer被释放的证据,那么你需要进行与你的编译器相关的验证和验证,而不是你的代码 -
这听起来像XY problem。你真正想做的是什么?
-
很公平。然后,您可以在函数中对数组和变量进行子范围划分。或者在这种情况下只使用堆分配。在一些需要快速分配和缓冲区重用的有限情况下,我构建了一个简单的缓冲池堆栈。
标签: c memory-management local-variables stack-pointer static-allocation