C问题中的数组初始化

时间:2016-03-31 14:29:41

标签: c arrays header

我在标题中初始化数组时遇到了一个有趣的问题。

我有:

static u32 TxBuffer_Data[MAX_PKT_LEN_WORDS] = { 10 };
static u32 RxBuffer_Data[MAX_DMA_RX_FIFOMODE_WORDS] = { 0 };

现在,我希望两者都在嵌入式处理器的.data部分内,即在编译时分配并初始化,理想情况下为零。

现在,根据How to initialize all members of an array to the same value?,此处的语法是正确的。

当我运行我的代码时,我获取这两个缓冲区的地址,Txbuffer确实在.data区域内,但是RxBuffer在.bss内,它是为非初始化编译时分配的变量保留的。如果我将{0}更改为{10},则RxBuffer会正确放入.data部分。

为什么我不能将数据初始化为零并仍然将其定义为已初始化?

感谢。 编

1 个答案:

答案 0 :(得分:2)

bss部分中的数据是零初始化的。将数组声明为:

static u32 RxBuffer_Data[MAX_DMA_RX_FIFOMODE_WORDS] = { 0 };

static u32 RxBuffer_Data[MAX_DMA_RX_FIFOMODE_WORDS];

实际上是一样的。在这两种情况下,数组都是零初始化的,很可能编译器会将数组放在bss中。