Глобальные инициализированные переменные, объявленные как «const», переходят в текстовый сегмент, а те, которые объявлены как «статические» перейти к сегменту данных. Почему?

#include <stdio.h>

const int str[1000] = {0};

int main(void)
{
    printf("arr is %d\n", str[0]);
    return 0;
}

Имеет следующий вывод:

[-exercises/adam/stack2]:size a.out
   text    data     bss     dec     hex filename
   5133     272      24    5429    1535 a.out

Принимая во внимание:

#include <stdio.h>

static int str[1000] = {0};

int main(void)
{
    printf("arr is %d\n", str[0]);
    return 0;
}

Имеет следующий вывод:

[-exercises/adam/stack2]:size a.out
   text    data     bss     dec     hex filename
   1080    4292      24    5396    1514 a.out

Когда массив неинициализирован - он снова переходит в текстовый сегмент для «const» и в BSS для «статического».

Переменная является глобальной и должна быть доступна из любого места в исполняемом файле, частью которого она является (из-за отсутствия «статики»), но учитывая ее переменную, я не знаю, почему она помещена в текстовый сегмент вместо сегмента данных. ?

6
задан Prasoon Saurav 17 October 2010 в 17:36
поделиться