cgcc

Force GCC to forgo zeroing certain globals


Is there any way to tell GCC to not initialize a particular global array to zero?

I want to reserve a large chunk of memory for storing a large data structure that my code manages, so I say:

#define SIZE_16_MB 0x01000000
BYTE mChunkSpace[SIZE_16_MB];

The problem is that crtinit() takes a million years to initialize this space to zero, and it is not at all necessary.

Is there any way I can force it not to initialize that space?

Currently I am hard-coding a memory address that is outside what the linker knows about, but that is not a particularly robust way of doing things.

Additionally, this is a slow embedded proc (50MHz Microblaze), so don't assume that i am talking about a PC. It really does take a long time to zero that space.


Solution

  • You can use the gcc attributes to store the object in another new memory section, like for example in the .noinit memory section.

     BYTE mChunkSpace[SIZE_16_MB] __attribute__ ((section (".noinit")));