【发布时间】:2019-02-11 23:31:15
【问题描述】:
我需要计算我的程序的堆栈内存消耗。
gcc 的-fstack-usage 仅计算函数的堆栈使用情况,但据我了解,该函数中不包含额外的函数调用。
void test1(){
uint32_t stackmemory[100];
function1(); //needs aditional stack, say 200 Bytes
uint32_t stackmemory2[100];
}
void test2(){
uint32_t stackmemory[100];
uint32_t stackmemory2[100];
function1(); //needs additional stack, say 200 Bytes
}
哪个 test() 函数使用更少的堆栈?我会说 test1(),因为在 function1() 调用之后堆栈被释放。还是这取决于优化级别 -Os/-O2 ...?
编译器是否在 test1() 中为它的所有静态变量分配内存,一旦输入函数?还是到达该行时分配stackmemory2[100]?
【问题讨论】:
-
是什么阻止了您进行实验?
-
@P__J__:实验结果并不是编译器规范的可靠指标;未来潜在的软件变更;或因命令行开关、源代码或其他情况的变化而导致的变化。
-
@EricPostpischil 我的 DV 线索正确吗?
-
@EricPostpischil 如果你说的是唯一的答案,那么 OP 现在可能会放弃,不是吗?但是编译器基本上是确定性的,否则使用它们进行软件开发是不可能的。实验结果将是有用的信息,但必须在特定设置和环境(如您提到的那些)中进行测量和记录,而不是将其视为适用于所有可能编译的简单常量。
-
@barny 这显然是个挑剔的人。一般来说,C 不知道堆栈是什么。我期待更多类似的cmets。例如 70 年代早期苏联无堆栈计算机制造的堆栈:)