Czy jest jakiś sposób, aby powiedzieć GCC, aby nie zainicjować konkretnej globalnej tablicy do zera?Wymuś GCC aby zrezygnować z niektórych globali
Chcę zarezerwować sporą część pamięci na przechowywanie dużej struktury danych, że mój kod zarządza, więc mówię:
#define SIZE_16_MB 0x01000000
BYTE mChunkSpace[SIZE_16_MB];
Problemem jest to, że crtinit() trwa miliony lat, aby zainicjować tę przestrzeń do zera, a to wcale nie jest konieczne.
Czy mogę go wymusić, aby nie zainicjować tego miejsca?
Obecnie trudniej jest kodować adres pamięci, który znajduje się poza linkiem, który zna linker, ale nie jest to szczególnie solidny sposób robienia rzeczy.
Dodatkowo jest to powolny proces wbudowany (mikroblazę 50 MHz), więc nie zakładaj, że mówię o komputerze. Zerowanie tej przestrzeni zajmuje naprawdę dużo czasu.
Natknęłam się na to samo, ale trudno mi było dokładnie określić, w jaki sposób jest on realizowany i czy byłby dostępny dla OP na swojej docelowej platformie. Z tego co wiem, sekcja '.noinit' jest tworzona w sekcji' .bss'. Czy to znaczy, że nie jest zero inicjalizowane * i * nie zajmuje ~ 16MB przestrzeni w pliku wykonywalnym? –
@EdS. "size -A -x" pokazuje mi, że adresy sekcji pamięci są inne niż adresy sekcji '.bss'. – ouah
Powtarzam to, co przeczytałem tutaj: http://www.nongnu.org/avr-libc/user-manual/mem_sections.html –