为什么更大的堆栈会因为因子4而增加.bss?

时间:2014-03-15 17:04:45

标签: c memory-management stack

我目前正在开发一个嵌入式项目(STM32F103RB,CooCox CoIDE v.1.7.6 with 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是.text之后但在.heap和.stack之前保存未初始化数据的部分。因此.bss应该 NOT 受到增加堆栈大小的影响。但在这种情况下.bss IS 。那么.co_stack可能是一种用户定义的堆栈?但是我真的没有得到:.bss增长了4倍的堆栈大小? e.g。

#define STACK_SIZE       0x00001000 
.bss 16384 = 0x4000

#define STACK_SIZE       0x00000100 
.bss 1024 = 0x400

1 个答案:

答案 0 :(得分:2)

我在网上找到的startup_stm32f10x_md.c的副本将堆栈定义为long的数组(建议保持长字对齐)。

static unsigned long pulStack[STACK_SIZE];

0x1000 longs加起来为4096 x 4 = 16K。