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?

questionAnswers(3)

yourAnswerToTheQuestion