C: Расположение памяти выполнения программы C

Я хотел, знают, как ядро обеспечивает память для простой программы C.

Например:

#include<stdio.h> 
#include<malloc.h> 
int my_global = 10 ; 
main() 
{ 
char *str ; 
static int val ; 
str = ( char *) malloc ( 100 ) ; 
scanf  ( "%s" , str ) ;
printf( " val:%s\n",str ) ;
free(str) ;
return 1 ;
}

Посмотрите В этой программе, которую я использовал статичный, глобальный и malloc для выделения динамической памяти Так, как память размечает, будет...? Любой дает мне URL, который будет иметь, имеют подробную информацию об этом процессе..

5
задан Pavunkumar 20 March 2010 в 07:10
поделиться

2 ответа

По сути, в программах на C, созданных для целевого формата ELF (исполняемый и связываемый формат), таких как программы, построенные на Linux, создается стандартная структура памяти. Подобные макеты, вероятно, существуют для других архитектур, но я недостаточно знаю, чтобы рассказать вам о них больше.

Схема:

Есть некоторые разделы глобальных данных, которые инициализируются в младших адресах памяти в памяти (например, разделы для текущего исполняемого кода, глобальные данные и любые строки, созданные с помощью ".. . " внутри вашего кода C).

Ниже находится куча открытой памяти, которую можно использовать. Размер этой кучи автоматически увеличивается по мере того, как вызовы malloc и free перемещают то, что называется «остановкой программы», по более высоким адресам в памяти.

Начиная с старшего адреса в памяти, стек увеличивается в сторону младших адресов.Стек содержит память для любых локально распределенных переменных, например, в верхней части функций или в области видимости ( {...} ).

Дополнительная информация:

Хорошее описание работающей программы ELF можно найти здесь , а более подробную информацию о самом формате можно найти в статье в Википедии . Если вам нужен пример того, как компилятор переводит код C в сборку, вы можете посмотреть GCC, в их Internals Manual есть кое-что интересное; наиболее важные разделы, вероятно, находятся в главе 17, особенно 17.10, 17.19 и 17.21. Наконец, Intel имеет много информации о структуре памяти в ее IA-32 Architectures Software Developer's Manual . В нем описывается, как процессоры Intel обрабатывают сегментацию памяти, создание стеков и тому подобное. Подробностей об ELF нет, но можно увидеть, где они совпадают. Наиболее полезными являются, вероятно, раздел 3.3 тома 1: Базовая архитектура и глава 3 тома 3A: Руководство по системному программированию, часть 1.

Я надеюсь, что это поможет любому, кто погрузится во внутреннее устройство выполнения программ на языке C, удачи.

7
ответ дан 14 December 2019 в 01:05
поделиться

Краткое обсуждение в википедии .

Немного более подробное введение здесь .

Более подробная информация доступна здесь , но я не уверен, что она представлена ​​очень хорошо.

1
ответ дан 14 December 2019 в 01:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: