Внутренняя динамика управления памятью - PullRequest
1 голос
/ 10 сентября 2011

Я студент и хочу узнать больше об управлении динамической памятью. Для C ++ вызывающий оператор new () может выделить блок памяти в Heap (Free Store). На самом деле у меня нет полной картины, как этого добиться.

Есть несколько вопросов: 1) По какому механизму ОС может выделить блок памяти ?? Как я знаю, существуют некоторые базовые схемы распределения памяти, такие как «первое соответствие», «наилучшее соответствие» и «худшее соответствие». Использует ли ОС одну из них для динамического выделения памяти в куче?

2) Для разных платформ, таких как Android, IOS, Window и т. Д., Используются ли разные алгоритмы выделения памяти для выделения блока памяти?

3) Для C ++, когда я вызываю оператор new () или malloc (), выделяет ли распределитель памяти блок памяти случайным образом в куче?

Надеюсь, что кто-нибудь может мне помочь.

Спасибо

1 Ответ

1 голос
/ 10 сентября 2011

malloc - это не системный вызов, это библиотечная (libc) подпрограмма, которая проходит через некоторые из своих внутренних структур, чтобы дать вам адрес свободной части памяти требуемого размера.Системный вызов выполняется только в том случае, если сегмент данных процесса (т. Е. Виртуальная память, которую он может использовать) не является «достаточно большим» в соответствии с рассматриваемой логикой malloc.(В Linux системный вызов для увеличения сегмента данных равен brk)

Проще говоря, malloc обеспечивает детальное управление памятью, в то время как ОС управляет более крупными, большими кусками памяти, доступными для этого процесса.

Не только разные платформы, но и разные библиотеки используют разные malloc;некоторые программы (например, python) используют вместо этого свой внутренний распределитель, поскольку они знают свои собственные шаблоны использования и могут таким образом повысить производительность.

В википедии . есть длинная статья о malloc.1016 *

...