Gibt es eine Möglichkeit, GCC zu sagen, ein bestimmtes globales Array nicht auf Null zu initialisieren?GCC zwingen, bestimmte Globals auf Null zu setzen
Ich möchte zum Speichern einer großen Datenstruktur, die mein Code verwaltet, einen großen Teil des Speichers reservieren, so sage ich:
#define SIZE_16_MB 0x01000000
BYTE mChunkSpace[SIZE_16_MB];
Das Problem, dass crtinit ist() eine Million Jahre dauert, um diesen Raum zu initialisieren zu Null, und es ist überhaupt nicht notwendig.
Gibt es eine Möglichkeit, ich kann es zwingen, diesen Raum nicht zu initialisieren?
Momentan bin ich hart codieren eine Speicheradresse, die außerhalb ist, was der Linker weiß, aber das ist keine besonders robuste Art, Dinge zu tun.
Zusätzlich ist dies ein langsamer Embedded-Prozess (50 MHz Microblaze), also nicht davon ausgehen, dass ich über einen PC spreche. Es dauert wirklich lange, diesen Raum auf Null zu setzen.
Ich bin selbst darüber gestolpert, aber es fiel mir schwer herauszufinden, wie genau es umgesetzt wird und ob es dem OP auf seiner Zielplattform zur Verfügung stehen würde. Von dem, was ich sagen kann, wird eine '.noinit' Sektion im' .bss' Bereich erstellt. Bedeutet das, dass es nicht null initialisiert * ist und nicht ~ 16MB Speicherplatz in der ausführbaren Datei belegt? –
@EdS. "size -A -x" zeigt mir, dass die Adressen des Speicherbereichs sich von den Adressen des '.bss'-Bereichs unterscheiden. – ouah
Ich wiederhole, was ich hier lese: http://www.nongnu.org/avr-libc/user-manual/mem_sections.html –