假设int大小为4个字节。 在C中的代码段之后,需要多少字节来存储变量? *我读到一些可以存储在寄存器/堆栈中,但是我询问了总大小,因此没关系。
{
int a,b;
{
int c;
}
{
int d, e;
}
}
谢谢。
答案 0 :(得分:2)
您不必在意,它很大程度上取决于optimization标志和compiler。
变量可以完全保留在processor register中,然后不占用内存(有时它不出现在生成的机器代码中,因为编译器发现该变量是没用的)。但是,请阅读有关call stack和呼叫帧以及register allocation的信息。当然,常识规则是避免巨大的呼叫帧(例如,避免声明非常大的automatic variables,例如double hugelocalarr[1000000];
)。合理的调用框架(通常)最多应为一千字节或几个千字节(通常,总调用堆栈不应超过一兆字节或几个千字节,并且您需要考虑递归函数或深度嵌套的调用)
实际上,如果您使用GCC进行编译,请查看command options,例如-Wstack-usage=
X(将其与各种优化标志一起使用,例如-O1
或{{ 1}} ...)等...您会收到有关使用大量堆栈(超过X个字节)的函数的警告。
还要注意tail calls。最近的编译器有时能够巧妙地优化它们。再想想inline expansion。编译器可以在优化时做到这一点(即使没有任何-O2
关键字的 )。
阅读David Chisnall的C is not a low-level language论文。