OSDev http://osdev.su/ |
|
Освобождение памяти http://osdev.su/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/ |