Как и любая другая структура данных, стек - это структура данных, которая следует принципу LIFO (последний пришел первым вышел). Как уже упоминалось в вашем вопросе, он выполняет операции push и pop для ввода и извлечения данных в соответствии с принципом LIFO.
Каждый процесс состоит в основном из 4 частей адресного пространства, которые доступны для процесса, когда он выполняется
Текст - эта часть содержит фактические выполняемые инструкции m / c.Во многих операционных системах этот параметр установлен только для чтения, поэтому процесс не может изменять свои инструкции.Это позволяет нескольким экземплярам программы совместно использовать одну копию текста.
Данные - эта часть содержит часть данных программы.Далее он делится на
1) Инициализированные данные только для чтения - он содержит элементы данных, которые инициализируются программой, и они читаются только во время выполнения процесса.
2) Инициализированное чтениеЗапись данных. Содержит элементы данных, которые инициализируются программой и будут изменены в ходе выполнения процесса.
3) Неинициализированные данные. Содержит элементы, которые не были инициализированы программой и имеют значение 0.до выполнения процессов.Они также могут быть изменены и обозначены как BSS (символ начала блока).Преимуществом таких элементов является то, что системе не нужно выделять место в программном файле для этой области, потому что она инициализируется в 0 операционной системой до того, как процесс начнет выполняться.
Stack - эта частьиспользуется для локальных переменных, стековых фреймов
Heap - эта часть содержит динамически распределенную память
int abc = 1; ----> Initialized Read-Write Data
char *str; ----> BSS
const int i = 10; -----> Initialized Read-Only Data
main()
{
int ii,a=1,b=2,c; -----> Local Variables on
Stack
char *ptr;
ptr = malloc(4); ------> Allocated Memory in Heap
c= a+b; ------> Text
}
Данные, данные для хранения Текст, код для хранения
Есть 3 (main?) сегменты / разделы файла, создаваемые компоновщиком.текст - текст программы (и, видимо, массивы const char. возможно, другие массивы 'const', так как они не могут быть изменены в любом случае).Я не уверен на 100% в части массива, возможно, кто-то меня поправит.
data - инициализированные глобальные данные.см. примеры ниже.bss - неинициализированные глобальные данные.Вот несколько примеров
int x = 1; /* goes into data */
int y; /* goes into bss */
const int z = 1;
, мы видели, что идут в «текст», так как не могут быть изменены в любом случае, но могут быть защищены
const char array[] = {'a','b'....etc}
/* the rest goes into text */
int main(void)
{
return EXIT_SUCCESS;
}
Блок, начатый символом
(BSS) Сегмент неинициализированных данных, созданный линкерами Unix.Другие сегменты представляют собой «текстовый» сегмент, который содержит программный код, а «информационный» сегмент содержит инициализированные данные.Объекты в сегменте bss имеют только имя и размер, но не имеют значения.