История изменений
Исправление KivApple, (текущая версия) :
Я просто вёл один семестр системного программирования у французских студентов :-) Но они были сообразительнее в среднем.
Касательно mmap я знаю, что многие аллокаторы куски памяти больше какого-то порога округляют до размера страницы и напрямую запрашивают у ОС через mmap. Нет смысла искать гигабайтный блок в пуле. Соответственно, такой блок при освобождении будет освобожден через munmap и это хорошо, потому что чем быстрее вернётся такой огромный кусок памяти ОС, тем лучше.
А вот вероятность освобождения маленького блока таким образом мала, потому что это надо чтобы все блоки в этом куске пула освободились, а при использовании sbrk ситуация ещё более редкая, потому что такой пул может расти и уменьшаться только хвостом.
Но в любом случае гораздо выше сегфолта шанс наткнуться на какие-то структуры аллокатора. И этот шанс был ещё выше во времена малых объёмов ОЗУ, потому что хранить отдельно то что можно хранить в свободной памяти - очень расточительно. Поэтому я не верю, что хоть сколько-нибудь адекватные разработчики осознанно использовали память после free даже 30 лет назад.
Исправление KivApple, :
Я просто вёл один семестр системного программирования у французских студентов :-) Но они были сообразительнее в среднем.
Касательно mmap я знаю, что многие аллокаторы куски памяти больше какого-то порога округляют до размера страницы и напрямую запрашивают у ОС через mmap. Нет смысла искать гигабайтный блок в пуле. Соответственно, такой блок при освобождении будет освобожден через munmap и это хорошо, потому что чем быстрее вернётся такой огромный кусок памяти ОС, тем лучше.
А вот вероятность освобождения маленького блока таким образом мала, потому что это надо чтобы все блоки в этом куске пула освободились, а при использовании sbrk ситуация ещё более редкая.
Но в любом случае гораздо выше сегфолта шанс наткнуться на какие-то структуры аллокатора. И этот шанс был ещё выше во времена малых объёмов ОЗУ, потому что хранить отдельно то что можно хранить в свободной памяти - очень расточительно. Поэтому я не верю, что хоть сколько-нибудь адекватные разработчики осознанно использовали память после free даже 30 лет назад.
Исходная версия KivApple, :
Я просто вёл один семестр системного программирования у французских студентов :-)
Касательно mmap я знаю, что многие аллокаторы куски памяти больше какого-то порога округляют до размера страницы и напрямую запрашивают у ОС через mmap. Нет смысла искать гигабайтный блок в пуле. Соответственно, такой блок при освобождении будет освобожден через munmap и это хорошо, потому что чем быстрее вернётся такой огромный кусок памяти ОС, тем лучше.
А вот вероятность освобождения маленького блока таким образом мала, потому что это надо чтобы все блоки в этом куске пула освободились, а при использовании sbrk ситуация ещё более редкая.
Но в любом случае гораздо выше сегфолта шанс наткнуться на какие-то структуры аллокатора. И этот шанс был ещё выше во времена малых объёмов ОЗУ, потому что хранить отдельно то что можно хранить в свободной памяти - очень расточительно. Поэтому я не верю, что хоть сколько-нибудь адекватные разработчики осознанно использовали память после free даже 30 лет назад.