Re: Фрагментация памяти
От: _Winnie Россия C++.freerun
Дата: 21.11.04 17:30
Оценка: 4 (3) +1
Здравствуйте, Dr.Gigabit, Вы писали:

DG>Кто нибудь с этим в реальных системах сталкивался? Или проблема носит чисто академический характер?


Сталкивался. В Debug-build игрушки, которая требовала около полутора гигабайт оперативки. Получил самый настоящий std::bad_alloc.
Надавали по рогам дизайнерам уровней.

В windows правильней говорить о фрагментации адресного пространства, а не самой памяти. OS может незаметно для приложения таскать блоки памяти размером 4096 байт туда-сюда, см. в MSDN как работает VirtualAlloc и свопинг.

В обычных приложениях с потребленим памяти 50-200 Мб. нужны довольно патологические синтетические тесты, что бы память не смогла выделится из-за фрагментации.

Примерно так: выдяем много "маленьких" блоков по мегабайту, так что они занимают почти все адресное пространство (да, при этом будет жестокий swap).
Вот так:
****************************************************************

Затем освобждаем так, что бы остались вот такие пустые блоки:
*      *     *      *      *    *      *   *         *         *

При попытке выделить такой "большой" блок
*********************************


попытка провалится, так как просто не будет адресного пространства, куда его поместить. Хотя в общей сумме места полно.
Обычно до этого момента программы не доходят, так как пользователь считает, что они зависли, и вырубает их.
Правильно работающая программа — просто частный случай Undefined Behavior
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.