迫使GCC放弃归零某些全局变量

NXT*_*NXT 7 c gcc

有没有办法告诉GCC不将特定的全局数组初始化为零?

我想保留一大块内存来存储我的代码管理的大型数据结构,所以我说:

#define SIZE_16_MB 0x01000000
BYTE mChunkSpace[SIZE_16_MB];
Run Code Online (Sandbox Code Playgroud)

问题是crtinit()需要一百万年才能将这个空间初始化为零,而且根本不需要.

有什么办法可以强迫它不要初始化那个空间吗?

目前我正在硬编码一个超出链接器知道的内存地址,但这并不是一种特别强大的做事方式.

此外,这是一个缓慢的嵌入式proc(50MHz Microblaze),所以不要以为我在谈论PC.确实需要很长时间才能将该空间归零.

oua*_*uah 6

您可以使用这些gcc属性将对象存储在另一个新的内存部分中,例如在.noinit内存部分中.

 BYTE mChunkSpace[SIZE_16_MB] __attribute__ ((section (".noinit")));
Run Code Online (Sandbox Code Playgroud)