OSDev
http://osdev.ru/

Освобождение памяти
http://osdev.ru/viewtopic.php?f=13&t=773
Страница 1 из 1

Автор:  Alexanbar [ 04 авг 2013, 10:16 ]
Заголовок сообщения:  Освобождение памяти

Было время, когда в ходу были исключительно дискеты.

И там существовала проблема фрагментации: полдискеты свободно, а записать большой файл нельзя - свободное место рассредоточено по всей дискете, а не в одном месте.

Существует ли сейчас подобная проблема с оперативной памятью?

Могут ли приложения использовать память "в шахматном порядке"?

Автор:  SII [ 04 авг 2013, 11:25 ]
Заголовок сообщения:  Re: Освобождение памяти

С дискетами такой проблемы никогда не существовало, поскольку файлы в общем случае не обязаны занимать непрерывное место на диске. Лишь некоторые файлы в некоторых системах должны были быть непрерывными -- и только для их записи необходимо было иметь достаточно большой непрерывный участок свободных блоков.

Вот с ОЗУ такая проблема есть во всех системах, не поддерживающих виртуальную память, поскольку там задача должна занимать непрерывные физические адреса памяти (так как виртуальные адреса, которыми оперирует сама программа, совпадают с физическими). В системах же с виртуальной памятью этой проблемы на уровне задач нет: виртуальные адреса отображаются на физические достаточно произвольным образом, поэтому виртуальное адресное пространство задачи может быть раскидано по произвольным страницам физической памяти, при этом оставаясь непрерывным с точки зрения самой задачи.

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

Автор:  Alexanbar [ 04 авг 2013, 11:58 ]
Заголовок сообщения:  Re: Освобождение памяти

Цитата:
Вот с ОЗУ такая проблема есть во всех системах, не поддерживающих виртуальную память,


А на windows это распространяется?

Автор:  SII [ 04 авг 2013, 12:00 ]
Заголовок сообщения:  Re: Освобождение памяти

У Винды виртуальная память была всю жизнь, поэтому фрагментация ОЗУ ей не мешает.

Автор:  Nable [ 04 авг 2013, 13:10 ]
Заголовок сообщения:  Re: Освобождение памяти

Фрагментация физической памяти - нет (практически не мешает), а вот фрагментация следующего слоя (кучи, т.е. heap) - обычное дело и таки довольно часто может мешать (в 32-битном ВАП, например; в 64-битном сложно на это нарваться, не спорю, правда, таблицы страниц уж больно дофига занимать могут). Тут можно радостно вспомнить про position-independent code (чтобы можно было библиотеки куда угодно грузить и переотображать и соотв. избегать фрагментации кучи) и managed-языки (в которых нет указателей, а есть только ссылки, соотв. можно халявно (в смысле что без переписывания приложений) дефрагментировать кучу и даже свопиться).
Ессно, всё вышесказанное относится не только к Windows, но и вообще к чему ни попадя.

Автор:  iz56 [ 05 авг 2013, 21:34 ]
Заголовок сообщения:  Re: Освобождение памяти

Windows и её манипуляции с памятью - весьма интересная штука. Можно написать книгу. Только нет на свете такого человека, который бы смог понять эту ос достаточно хорошо для того что бы эту книгу можно было читать.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/