我目前正在开发一个嵌入式项目(STM32F103RB、CooCox CoIDE v.1.7.6 和 arm-none-eabi-gcc 4.8 2013q4)。我有一个简单的项目:
int main(void)
{
return 0;
}
我使用以下代码(摘自startup_stm32f10x_md.c
)来设置堆栈大小
#define STACK_SIZE 0x00001000
__attribute__ ((section(".co_stack")))
unsigned long pulStack[STACK_SIZE];
根据我的理解,.bss 是 RAM 中 .text 之后但 .heap 和 .stack 之前保存未初始化数据的部分。因此 .bss 应该不会受到增加堆栈大小的影响。但在这种情况下 .bss IS 。那么 .co_stack 可能是一种用户定义的堆栈?但我真的不明白:.bss 会增长堆栈大小的 4 倍吗?例如
#define STACK_SIZE 0x00001000
.bss 16384 = 0x4000
或
#define STACK_SIZE 0x00000100
.bss 1024 = 0x400
最佳答案
我在网上找到的startup_stm32f10x_md.c的副本将堆栈定义为长数组(建议保持长字对齐)。
static unsigned long pulStack[STACK_SIZE];
0x1000 长整型加起来为 4096 x 4 = 16K。
关于c - 为什么更大的堆栈会使 .bss 增加 4 倍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22426936/