我正在从事嵌入式编程,其中节省内存非常重要。
以下 C 代码在运行时将占用多少堆栈空间?
if (send_small_message) {
uint8_t buffer[16000];
// do something with the buffer
} else {
uint8_t buffer[32000];
// do something the with buffer
}
某些编译器是否可能决定为两个缓冲区分配16000+32000 = 48kB的堆栈空间?还是可以保证,由于两个缓冲区永远不会同时使用,编译器将仅分配32kB - 更大的缓冲区的大小?
跟进问题:
void SendSmallMessage() {
uint8_t buffer[16000];
// do something with the buffer
}
void SendLargeMessage() {
uint8_t buffer[32000];
// do something with the buffer
}
某个编译器编译的代码能否在运行时使用16000 + 32000字节来执行以下代码片段:
if (send_small_message) {
SendSmallMessage();
} else {
SendLargeMessage();
}