АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Динамическое выделение памяти

Читайте также:
  1. C.) При кодировании текстовой информации в кодах ASCII двоичный код каждого символа в памяти ПК занимает
  2. D) ограничен размером виртуальной памяти
  3. II. Диагностика памяти и внимания
  4. Вирусы памяти
  5. Выделение избыточной реакционной воды
  6. Выделение инженерно-геологических элементов
  7. Выделение оксидов азота
  8. Динамическое выделение памяти для массивов
  9. Динамическое описание систем
  10. Задание 10. Степень участия в памяти ассоциативных процессов.
  11. Игры направленные на развитие памяти у детей старшего дошкольного возраста

Динамическое распределение памяти

Статическое выделение памяти

Когда компилятор в начале блока встречает определение переменной или массива, то он выполняет следующие действия: 1) вычисляет размер, необходимый для хранения данных 2) выделяет необходимый объем памяти 3) запоминает, для какого типа данных он выделил память и дальше пользуется этим при операциях с данными.

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

Динамическое выделение памяти

Предположим, в программе используется массив, длина которого станет известной только в ходе выполнения программы. Механизм статического распределения позволяет решить эту задачу, но не рациональным способом. А именно: задать для массива размер, который заведомо подходит для всех случаев. Так как компилятор не может оптимально решить эту задачу, то ее решение перекладывается на программиста. Для этого используется механизм динамического выделения памяти. Программист должен делать то же что и компилятор: 1) вычислить размер создаваемого блока данных 2)предусмотреть выделение памяти и запоминание адреса этой памяти 3) учитывать в операциях тип данных 4) если объект данных становится не нужен, то программист должен предусмотреть освобождение памяти!

С динамическим выделением памяти связаны два типа ошибок: 1) "повисшие" указатели. Предположим, была выделена память, и ее адрес мы запомнили в некоторой переменной. Затем память освободили, а переменная продолжает хранить адрес, который теперь указывает на неизвестные данные. Т.е. блока данных нет, а указатель есть. 2) "зомби" блоки. Механизм динамического выделения памяти никак не связан с понятиями областей видимости. Это означает, что блок памяти остается зарезервированным до тех пор, пока мы его явно не освободим. В отличие от этого, переменная, которая хранит адрес блока, имеет свою область действия. При выходе из нее переменная уничтожается. Это означает, что блок памяти выделен, а обратиться к нему мы не можем. В том числе и для того чтобы его освободить. Такие блоки засоряют память, и, в конце концов, может оказаться, что программе не хватает памяти для выполнения очередной операции выделения памяти. Это часто происходит, если память выделяется в цикле. За освобождение ответственен программист.


1 | 2 | 3 | 4 | 5 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.)