Dlaczego stałe są przechowywane w segmencie tekstu na mapie pamięci C?
Witaj Rozważ poniższe fragmenty kodu skompilowane za pomocą gcc na komputerze z systemem Linux (64-bitowym) z odpowiednią mapą pamięci
#include <stdio.h>
int global = 2;
int main(void)
{
int local = 0;
return 0;
}
text data bss dec hex filename
1092 500 16 1608 648 mem
Tutaj istnieje zmienna globalna zainicjowana na 2. Został zapisany w segmencie danych. Rozważmy przypadek uczynienia go stałym, jak pokazano poniżej
#include <stdio.h>
int const global = 2;
int main(void)
{
int local = 0;
return 0;
}
text data bss dec hex filename
1096 496 16 1608 648 mem
Tutaj zmienna globalna jest przenoszona z segmentu danych do segmentu tekstu.
Dlaczego przeniesiono go z segmentu do danych?
Ponieważ segment danych jest podzielony na obszary odczytu i zapisu, powinien być przechowywany w obszarze odczytu danych, prawda?
Co dzieje się z niezainicjowaną zmienną globalną zainicjowaną w środku kodu?