Linux программирование в примерах
Шрифт:
Выход за пределы буфера
Доступ к памяти за пределами выделенного блока также ведет к неопределенному поведению, опять из-за того, что она может содержать учетную информацию или, возможно, вообще не принадлежать адресному пространству процесса. Запись в такой участок памяти гораздо хуже, поскольку это может уничтожить учетные данные.
Отказ в освобождении памяти
Любая динамическая память, которая больше не нужна, должна быть освобождена. В частности, необходимо тщательно управлять памятью и освобождать ее, когда она выделяется внутри циклов или рекурсивных или глубоко вложенных вызовов функций. Отказ от этого ведет к утечкам памяти, при которых память процесса может неограниченно расти; в конце концов, процесс завершается из-за нехватки памяти. Эта ситуация может быть особенно разрушительной, если память выделяется для ввода записи или как-то еще связана с вводом: утечка памяти будет незаметна при использовании незначительных объемов ввода, но внезапно станет очевидной (и приведет в замешательство) при больших. Эта ошибка еще хуже для систем, которые должны работать непрерывно, как в системах телефонных коммутаторов. Утечка памяти, вызывающая крушение такой системы, может привести к значительным денежным или другим потерям.
Даже если программа никогда не завершается из-за недостатка памяти, постоянно увеличивающиеся программы теряют производительность, поскольку операционная система должна сохранять использующиеся данные в физической памяти. В худшем случае, это может привести к поведению, известному как пробуксовка (thrashing), при которой операционная система так занята перекачкой содержимого адресного пространства в и из физической памяти, что реальная работа не делается.
Хотя
При условии, что освобожденная память продолжает оставаться в адресном пространстве процесса, стоит обнулить ее перед освобождением. Например, такой способ может оказаться предпочтительным для программ с повышенными требованиями к безопасности.
Обсуждение ряда полезных инструментов для отладки динамической памяти см в разделе 15.5.2 «Отладчики выделения памяти».
3.2.1.4. Изменение размера:
Динамическая память имеет существенное преимущество перед статически объявленными массивами, поскольку это позволяет использовать столько памяти, сколько нужно, и не больше. Не нужно объявлять глобальный, статический или локальный массив фиксированного размера и надеяться, что он: (а) достаточно большой и (б) не слишком большой. Вместо этого можно выделить ровно столько, сколько нужно, не больше и не меньше.
Вдобавок, можно изменять размер динамически выделенной области памяти. Хотя можно сократить размер блока памяти, обычно его увеличивают. Изменение размера осуществляется с помощью
Как и в случае с
1. Вычислить новый выделяемый размер в байтах.
2. Вызвать
3. Привести тип и присвоить возвращенное
4. Как и для
При увеличении размера блока памяти
В любом случае вы можете предположить, что если
Возможно, вы заметили, что в нашем примере для указания на измененный блок памяти использовалась отдельная переменная. Можно было бы (хотя это плохая идея) использовать ту же самую переменную, как здесь:
Это плохо по следующей причине. Когда
Для версии
Повелители сумерек
Фантастика:
фэнтези
ужасы и мистика
юмористическая фантастика
детективная фантастика
рейтинг книги
Эпоха Опустошителя. Том VII
7. Вечное Ристалище
Фантастика:
аниме
фэнтези
попаданцы
рейтинг книги
Том 3. Рассказы 1896-1899
3. Собрание сочинений в тридцати томах
Проза:
русская классическая проза
рейтинг книги
Кодекс Крови. Книга V
5. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
рейтинг книги
Убивать чтобы жить 3
3. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
рейтинг книги
Враг из прошлого тысячелетия
4. Соприкосновение миров
Фантастика:
фэнтези
попаданцы
аниме
рейтинг книги
Газлайтер. Том 25
25. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
рейтинг книги
Шайтан Иван 6
6. Шайтан Иван
Фантастика:
попаданцы
альтернативная история
историческое фэнтези
рейтинг книги
Эпоха Опустошителя. Том VIII
8. Вечное Ристалище
Фантастика:
аниме
фэнтези
попаданцы
рейтинг книги
Моров. Том 3
2. Моров
Фантастика:
фэнтези
попаданцы
аниме
рейтинг книги
Приказано выжить!
1. Другая Русь
Фантастика:
боевая фантастика
попаданцы
альтернативная история
рейтинг книги
Герой
4. Совсем не герой
Фантастика:
фэнтези
попаданцы
рейтинг книги
Свет горизонта
1. Свет горизонта
Фантастика:
фэнтези
рейтинг книги