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

выделение памяти

Распределение памяти — это процесс, посредством которого операционная система управляет памятью вашего компьютера. В операционной системе память разделена на несколько областей фиксированного размера, называемых страницами. Эти страницы могут быть выделены процессам для хранения их кода, данных и сообщений стека.
Принцип распределения:
1. Запросить память: процесс запрашивает память у операционной системы и указывает необходимый размер памяти.
2. Выделение памяти. Операционная система выделяет процессу определенное количество страниц памяти и отображает их адреса в виртуальное адресное пространство процесса.
3. Используйте память. Процессы используют выделенную память для хранения своего кода, данных, стека и другой информации.
4. Освободить память. Процесс освобождает страницы памяти, которые больше не нужны, и возвращает их операционной системе для управления и распределения другим процессам.

Связь между виртуальной памятью и распределением памяти.
Виртуальная память — это технология компьютеров, которая позволяет процессу получать доступ к большему объему памяти, чем доступно на самом деле. Виртуальная память использует пространство жесткого диска для расширения памяти, позволяя процессу использовать больше памяти, чем фактическая физическая память, тем самым повышая производительность и эффективность системы.

Шаги по использованию выделения памяти для управления виртуальной памятью:
1. Преобразование адресов виртуальной памяти.
2. Замена страниц
. 3. Пейджинг. Необходимо подумать о том, как выделять страницы физической памяти процессам, чтобы максимизировать производительность и эффективность системы.
4. Защита страницы: необходимо контролировать доступ процесса к памяти.

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

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

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

Требования и цели распределителя

Распределитель используется для управления динамическим выделением и освобождением памяти.Хороший распределитель должен отвечать следующим требованиям и целям:
1. Эффективность: распределитель должен выделять и освобождать память как можно быстрее, чтобы минимизировать время ожидания приложения.
2. Масштабируемость. Распределитель должен иметь возможность эффективно управлять памятью и обрабатывать несколько одновременных запросов. Кроме того, размеры распределителей можно динамически изменять в соответствии с потребностями различных приложений.
3. Низкая фрагментация. Распределитель должен минимизировать возникновение фрагментации памяти, чтобы доступная память могла использоваться более эффективно.
4. Надежность. Распределитель должен быть в состоянии гарантировать правильность операций выделения и освобождения, а также избегать утечек памяти и несанкционированного доступа к памяти.
5. Портативность: распределитель должен иметь возможность работать на разных платформах и операционных системах.

Ограничения:
1. Внутренняя реализация распределителя должна быть потокобезопасной для поддержки многопоточных приложений.
2. Распределитель должен управлять размещением и выравниванием памяти, чтобы гарантировать правильность и эффективность распределения памяти.
3. Распределитель должен поддерживать пул памяти. технология, позволяющая избежать частых операций выделения и освобождения памяти.
4. Распределитель должен поддерживать технологию сжатия памяти, чтобы минимизировать фрагментацию памяти и улучшить ее использование.

Измерение производительности: скорость и эффективность памяти
Скорость часто измеряется с точки зрения пропускной способности, которая представляет собой количество блоков памяти, выделенных и освобожденных за определенный период времени. Чем выше пропускная способность, тем лучше производительность распределителя.
Эффективность памяти измеряется использованием памяти, которое представляет собой отношение выделенной памяти к общей памяти. Чем выше использование памяти, тем выше производительность распределителя.

Чтобы максимизировать пропускную способность и использование памяти, принимаются меры:
1. Максимально сократить генерацию фрагментов памяти за счет технологии пула памяти и технологии сжатия памяти.
2. Кэшировать как можно больше блоков памяти, чего можно быстро достичь. с помощью распределителя и пула кэша для достижения
3. Максимально сократите количество выделяемой и освобождаемой памяти, чего можно достичь с помощью технологии блокировки и технологии предварительного выделения.
4. Оптимизировать алгоритм распределения и освобождения блоков памяти.Соответствующие алгоритмы можно использовать для максимизации пропускной способности листьев и использования памяти.
5. Используйте потокобезопасные реализации для поддержки многопоточных приложений.

Фрагментация памяти, внешняя фрагментация

Внутренняя фрагментация означает потерю памяти в блоке памяти, выделенном процессу, поскольку выделенный размер превышает запрошенный размер и имеется больше свободного места. Например, если процесс запрашивает выделение 20-байтового блока памяти, но в системе доступно только 24 байта свободного блока памяти, то процесс выделит весь 24-байтовый блок памяти, из которых 4 байта будут выделены. быть выделены Это пустая трата памяти, это внутренняя фрагментация.

Внешняя фрагментация означает пространство в памяти, которое не было выделено, но слишком мало для выделения процессу, запрашивающему выделение. Эти пространства могут быть слишком малы, чтобы удовлетворить требования к памяти любого процесса. Например, если процессу необходимо выделить блок памяти размером 1000 байт, но в системе есть лишь несколько разбросанных пространств, каждое из которых меньше 1000 байт, то процесс не может быть удовлетворен, даже если общее пространство меньше больше 1000 байт. Байты больше, эти пробелы не будут использоваться, что является внешней фрагментацией.

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

おすすめ

転載: blog.csdn.net/m0_56898461/article/details/130200062
おすすめ