Модель памяти в языке Си

Модель памяти в языке Си

Модель памяти в языке Си — система хранения объектов в языке Си.[1]

Способ хранения объекта в языке Си определяет его время жизни — часть времени выполнения программы, во время которого объект существует или для него зарезервировано место. Объект имеет постоянный адрес и сохраняет своё последнее значение. Запрещается обращаться к объекту, который перестал существовать, при этом, если при работе с объектом использовался указатель, его значение остаётся неопределённым.

Существует три способа хранения объектов: автоматический, статический и динамический.[1]

Свойство Автоматический тип Статический тип Динамический тип
Объявление Объект без связывания и без static Имеет внутреннее или внешние связывание или объявлен с квалификатором static Выделен с помощью malloc
Время существования Блок, в котором объявлен объект Всё время выполнения программы От вызова malloc до вызова free
Инициализация Отсутствует в случае отсутствия явной инициализации Происходит один раз до запуска программы Частично в случае calloc
Размер Любой, неизменяемый Фиксированный, неизменяемый Любой, изменяемый

Статический объект можно инициализировать явно, либо использовать умалчиваемую инициализацию.

При использовании функции calloc все объекты имеют нулевое значение кроме чисел с плавающей запятой и указателей.[2]

Выражения, не являющиеся lvalue, связанные с обращением к массиву, являющегося членом структуры (struct) или объединения (union) имеют время существования, ограниченное оценкой такого выражения.[1]

Си-строки, которыми инициализируются указатели char*, имеют статический тип хранения и не должны изменяться.[3]

Динамическая память

Ни один объект не может находиться в динамической памяти без явного указания программиста. Для работы с динамической памятью существуют функции malloc, calloc, realloc и free. Поскольку функции, выделяющие память, принимают размер в переменной типа size_t, максимальный объём выделяемой памяти ограничен SIZE_T_MAX.[1]

Функции malloc и calloc выделяют память, которая после использования должна быть освобождена с помощью вызова free. После освобождения значение указателя остаётся неопределённым. Функция realloc возвращает указатель на изменённый блок памяти, если запрос не может быть удовлетворён, размер блока памяти не изменяется.[1]

#include <stdlib.h>
 
void foo (void *ptr, size_t size)
{
   ptr = realloc (ptr, size+128); /* утечка памяти, если realloc вернёт NULL */
   if (!ptr)
   {
     ...
   }
}

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

Пример

#include <stdlib.h>
#include <string.h>
 
static int x; /* 0 по умолчанию, существует всё время выполнения */
static int y=45; /* 45, существует всё время выполнения */
 
int main (void)
{
        char arr[50] = "This is object of automatic storage duration";
        char *line = "Simple line"; /* имеет статический тип, существует весь период выполнения программы*/
        int y; /* значение не определено, существует до выхода из main*/
        int z=10; /* значение определено, существует до выхода из main*/
        char *ptr;
        ptr = malloc (50); /* значение не определено, существует до вызова free */
        strcpy (ptr, arr);
        free (ptr);
        return 0;
}

Примечания



Wikimedia Foundation. 2010.

Игры ⚽ Поможем написать курсовую

Полезное


Смотреть что такое "Модель памяти в языке Си" в других словарях:

  • Плоская модель памяти — метод организации адресного пространства оперативной памяти вычислительных устройств. В плоской модели код и данные используют одно и то же адресное пространство. Для 16 битных процессоров плоская модель памяти позволяет адресовать 64 кБ… …   Википедия

  • МОДЕЛЬ ГЛУБИННЫХ И ВНЕШНИХ СТРУКТУР ЯЗЫКА — универсальная модель теории языка, которую разработал в 1950 60 х гг. амер. лингвист, философ и психолог Аврам Ноам Хомский (Chomsky, род. 1928). Предполагается, что единая глубинная смысловая структура может иметь множество различных внешних… …   Большая психологическая энциклопедия

  • Модель акторов — В компьютерных науках модель акторов представляет собой математическую модель параллельных вычислений, которая трактует понятие «актор» как универсальный примитив параллельного численного расчёта: в ответ на сообщения, которые он получает, актор… …   Википедия

  • Список синологов, пишущих на русском языке — …   Википедия

  • Общение : структура и модель процесса — Феномен О. сложное системное и многоуровневое явление, к рое имеет содержательный и динамический аспект. В содержательном плане выделяются когнитивная, эмоциональная и поведенческая составляющие, в динамическом параметры времени (длительность… …   Психология общения. Энциклопедический словарь

  • Си (язык программирования) — У этого термина существуют и другие значения, см. Си. Запрос «Язык программирования Си» перенаправляется сюда; см. также другие значения. Си Класс языка: процедурный Тип исполнения: компилируемый Появился в: 1969 1973 Автор( …   Википедия

  • D (язык программирования) — У этого термина существуют и другие значения, см. D. D Семантика: мультипарадигменный: императивное, объектно ориентированное, обобщённое программирование Тип исполнения: компилятор Появился в: 1999 Автор(ы) …   Википедия

  • CUDA — Тип GPGPU Разработчик NVIDIA Corporation Операционная система Windows XP и выше, Mac OS X, Linux Аппаратная платформа …   Википедия

  • Осознание — Сознание выступает термином, трудным для определения, поскольку данное слово используется и понимается в широком спектре направлений. Сознание может включать мысли, ощущения, восприятия, настроения, воображение и самосознание. В разное время оно… …   Википедия

  • Java (программная платформа) — Не следует путать с JavaScript. Программная платформа Java ряд программных продуктов и спецификаций компании Sun Microsystems, ранее независимой компании, а ныне дочерней компании корпорации Oracle, которые совместно предоставляют систему для… …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»