2014-10-14 2 views
0

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

  • Стек - локальные переменные и формальные значения параметров.
  • Динамическое хранение -?
  • Static Storage - смежные блоки памяти

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

+0

Игнорируя ответы, связанные с продолжительностью хранения обсуждений, существует несколько типов хранения. Если мы также игнорируем типы хранилищ, определенные компилятором/компоновщиком (разделы, такие как .const, .data, .bss и т. Д. Тогда в программе есть куча, глобальная, стек. Существуют дополнительные ограничения, такие как динамические, статичный. – user3629249

ответ

0
  • Динамическое хранилище будет возвращено с malloc().
  • Статическое хранилище включает в себя такие вещи, как глобалы и статические переменные.
1

Вы ищете продолжительность хранения, а не области.

  • Автоматический: переменная выделяется в начале прилагаемого кодового блока и освобождается по окончании. Это «в стеке», но стек - это деталь реализации.

  • Статический: память для переменной выделяется, когда программа начинается и освобождается, когда программа заканчивается. Здесь перечислены глобальные переменные и static.

  • Тема: хранилище для переменной выделяется, когда поток начинается и освобождается при завершении потока.

  • Выделено: память, выделенная по требованию с malloc, calloc и realloc и высвобождены с free. Это то, о чем люди говорят, когда говорят что-то «в куче». В C++ это называется динамической продолжительностью хранения.

2

C имеет 4 длительности хранения: статические, резьбовые Длительность динамического хранения называется выделено в C Стандартная терминология.

int a = 0;    // static storage duration 
static int b = 0;   // static storage duration 
_Thread_local int c = 0; // thread storage duration 

void bla(int d) // d has automatic storage duration 
{ 
    int e;    // automatic storage duration 
    static int f;   // static storage duration 
    int *p = malloc(42 * sizeof *p); // object allocated by malloc 
             // has allocated storage duration 
} 
Смежные вопросы