【发布时间】:2020-05-19 10:52:58
【问题描述】:
在 RAM 和堆栈空间有限的嵌入式 C++ 代码中,我经常遇到这种情况:
void f(parameters) {
if (condition) g(...); // g uses lots of stack space
else {
int table[1000];
// do something involving table
}
}
Gcc 在函数开始时在堆栈上为“table”分配空间,这意味着堆栈必须足够大以容纳“table”和 g() 所需的堆栈,即使它们在同一时间。
我想告诉 gcc 为包含 else 部分的 { } 块分配一个新的堆栈帧。这样,堆栈只需要足够大以容纳较大的“表”(加上 else 部分所需的其他堆栈)和调用 g() 所需的堆栈。有没有办法做到这一点?
我通常的解决方法是将 else 块转换为另一个函数调用并将该函数标记为不被内联;但在某些情况下,这样的解决方案很难看,因为该函数需要大量参数来传递之前在 f() 中计算的值。
【问题讨论】:
标签: c++ gcc stack-frame