c - 为什么更大的堆栈会使 .bss 增加 4 倍?

标签 c memory-management stack

我目前正在开发一个嵌入式项目(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/

相关文章:

objective-c - Objective-C c block 中的代码未按预期执行

c - 在C编程中每次读取文本文件或获取内容并用动态数组存储,哪个是最好的主意?

Java - FloatBuffers 的空闲内存

c++ - 堆栈/队列中的内存泄漏 C++

c++ - 将队列转换为堆栈?

c++ - 在我的 https 服务器中禁用 DES

c - 使用相同代码的 clang 和 gcc 之间的不同结果

c - 如何将 int 数组和 char 数组写入文件

java - 在 Java 中使用弱引用

stack - c 代码在 main 开始后用模式(0xABABABAB)绘制嵌入式堆栈?