Здравствуйте, Ребята.
У меня такая проблема..... Пишу программу, в которой реализуется сделаный мною менеджер кучи. Создаю кучу размером 100, а пытаюсь выделить память размером 500*sizeof(int). Но HeapAlloc не возвращает NULL, а выделяет память. В чём дело ? Вот листинг проги.
Здравствуйте, CO6SENYA, Вы писали:
COS>Здравствуйте, Ребята. COS>У меня такая проблема..... Пишу программу, в которой реализуется сделаный мною менеджер кучи. Создаю кучу размером 100, а пытаюсь выделить память размером 500*sizeof(int). Но HeapAlloc не возвращает NULL, а выделяет память. В чём дело ? Вот листинг проги.
Хип оперирует страницами, а не байтами. Объем страницы, насколько помню — 4096 байт. Ты ограничил размер хипа от 0 до 100 байтов — 1 страница. 500 интов — это 2000 байт. Так что никакой мистики.
Попробуй выделить память для 2000 интов. Сам проверить не могу — я ща под БСД вижу.
Спасибо огромное. Я перерыл кучу инфы, но нигде не было написано про то, что выделение идёт строго по 4к бит. Может ты подскажешь ещё про разницу между менеджерами, у которых тип управления а)битовые поля б)списки ??
Здравствуйте, CO6SENYA, Вы писали:
COS>Спасибо огромное. Я перерыл кучу инфы, но нигде не было написано про то, что выделение идёт строго по 4к бит.
А РИхтера уже отменили?
Про то, что HeapCreate создаёт кучу размером со страницу — это уже сказали. А вот встречный вопрос: ты привёл реальный код или демонстрашилку?
Если реальный — то это просто страшилка. В первую очередь — из-за утечки хэндлов... Было бы хотя б вот так:
Здравствуйте, CO6SENYA, Вы писали:
COS>Спасибо огромное. Я перерыл кучу инфы, но нигде не было написано про то, что выделение идёт строго по 4к бит. Может ты подскажешь ещё про разницу между менеджерами, у которых тип управления а)битовые поля б)списки ??
Уф, ну и вопросы Тут на диссертацию хватит писать Если интересно, для начала рекмендую почитать, как устроены аллокаторы в GCC реализации STL (здесь) Там и ссылки для усугубления есть