在GCC C中,有没有办法将数据推送/弹出到C返回堆栈?
我不是在谈论实现自己的堆栈(我知道如何做到这一点); 我的意思是使用现有的C返回堆栈来显式推送/弹出参数(当然,在同一级别的大括号内).
例如,类似于:
extern int bar;
void foo(void) {
PUSH(bar);
bar = 12;
doSomething(); // that depends on the value of bar
bar = POP(); // restore original value of bar
}
Run Code Online (Sandbox Code Playgroud)
如果有任何简单的方法可以做到这一点,我认为这将是一个更明确的替代方案,明确使用像"oldBar"这样的局部变量.
如果你使用临时变量,它基本上是一样的.临时变量在堆栈上分配或优化到寄存器.
例如
extern int bar;
void foo(void) {
int tmp = bar
bar = 12;
doSomething(); // that depends on the value of bar
bar = tmp; // restore original value of bar
}
Run Code Online (Sandbox Code Playgroud)
显然,C实际上并不需要将堆栈结构用于调用,因此这种功能没有意义.这是在本文的内存布局部分声明https://www.seebs.net/c/c_tcn4e.html
很简单,并非每个编译器都有"堆栈".有些系统实际上没有任何此类功能.C的每个编译器都有某种处理函数调用的机制,但这并不意味着它是一个堆栈.更重要的是,功能参数或局部变量通常不存储在任何"堆栈"中,而是存储在CPU寄存器中.这种区别可能很重要,应该被覆盖,而不是手工挥手.
从技术上讲,您也可以使用alloca()(位于alloca.h中)来执行此操作,但是释放该内存的唯一方法是返回函数调用.它也没有真正做你所建议的.alloca也不是C标准的一部分
| 归档时间: |
|
| 查看次数: |
245 次 |
| 最近记录: |