Перейти к содержимому
шпаргалка.
Esc
навигацияоткрыть⌘Jпредпросмотр
На этой странице

Память

Все темы C++ Developer

Где может храниться переменная?

В языке программирования C переменные могут храниться в различных областях памяти, каждая из которых имеет свои особенности по времени жизни и области видимости. Вот основные места хранения переменных:

  1. Стек (Stack): Локальные переменные внутри функций обычно хранятся на стеке. Они создаются при вызове функции и уничтожаются при её завершении.

  2. Куча (Heap): Динамически выделенная память (через malloc, calloc, realloc и другие функции) находится в куче. Переменные в куче сохраняются до тех пор, пока не будут освобождены с помощью free.

  3. Глобальная память (Global Area): Глобальные и статические переменные хранятся в глобальной области памяти. Они инициализируются при запуске программы и существуют до её завершения.

  4. Регистры (Registers): Компилятор может оптимизировать программу, помещая некоторые переменные непосредственно в регистры процессора для быстрого доступа.

  5. Литеральный пул (Literal Pool): Константы, такие как строковые литералы, обычно хранятся в отдельной области памяти, оптимизированной для неизменяемых данных.


Какая разница между calloc и malloc?

Функции calloc и malloc используются в языке программирования C для динамического выделения памяти, но они работают немного по-разному:

  1. malloc (Memory Allocation):

    • Принцип работы: Выделяет блок памяти заданного размера.

    • Инициализация: Память, выделенная с помощью malloc, не инициализируется. Это означает, что начальные значения в выделенной памяти не определены (могут быть мусорные значения).

    • Синтаксис: void* malloc(size_t size);

    • Пример: int* ptr = malloc(10 * sizeof(int)); выделит память для 10 целочисленных значений, но не инициализирует их.

  2. calloc (Contiguous Allocation):

    • Принцип работы: Выделяет блок памяти для массива элементов заданного размера и количества.

    • Инициализация: Память, выделенная с помощью calloc, автоматически инициализируется нулями.

    • Синтаксис: void* calloc(size_t num, size_t size);

    • Пример: int* ptr = calloc(10, sizeof(int)); выделит память для 10 целочисленных значений и инициализирует их нулями.

Основное отличие между malloc и calloc заключается в инициализации: calloc инициализирует выделенную память нулями, в то время как malloc оставляет память неинициализированной.

Эта страница была полезной?