|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Сен 5, 2003 07:53:39 Да, у меня такая проблема. Я создаю буфер с помощью GlobalAlloc. Начинаю складывать в него доступные видеорежимы. Дохожу до конца буфера и выполняю GlobalReAlloc. Он говорит, что не достаточно памяти. У меня в этот момент 512Mb установлено и 300 с лишним свободно по данным системы. Я хочу выделить несчастных 2 килобайта. Все параметры у GlobalReAlloc проверял - точно. Передаю хэндл от GlobalAlloc, 2048, флаг ZEROINIT. Не пойму, в чём дело. Сейчас попробую использовать Heap функции, но надежды мало? Кто-нибудь знает такие приколы? |
|
|
Дата: Сен 5, 2003 10:41:45 Поставь флаг: GHND (GMEM_MOVEABLE | GMEM_ZEROINIT) У тебя не moveable |
|
|
Дата: Сен 5, 2003 10:46:15 А какая разница между GlobalAlloc и HeapAlloc? В MSDN пишут: Windows memory management does not provide a separate local heap and global heap. А еще: applications should use the heap functions. |
|
|
Дата: Сен 5, 2003 14:47:28 Я попробовал сделать через HeapReAlloc и проблема исчезла. Хотя нет жёстких доказательств, что виноват был именно GlobalReAlloc. К ZverA Да мне не нужен movable. Пусть он будет фиксд. И zeroinit здесь ни при чём. Можно и без него. Дело не в этом. Я не верю, что во всех 300 метрах моей памяти нельзя найти цельный кусочек размером 2 или 4 килобайта. |
|
|
Дата: Сен 5, 2003 16:53:02 А мне кажется, меньше 4 Кб все равно выделять нет смысла. Или я глубоко ошибаюсь? |
|
|
Дата: Сен 5, 2003 23:46:59 > А мне кажется, меньше 4 Кб все равно выделять нет смысла. Или я глубоко ошибаюсь? Скорее всего ошибаешся :) |
|
|
Дата: Сен 6, 2003 11:57:06 Вообще-то можно выделять до 4 байт. Я проверял дебаггером в памяти. Правда это извращение. Я вот попробовал выделять с GlobalAlloc 4 байта (с флагами GMEM_FIXED or GMEM_ZEROINIT). Он исправно обнулил 4 байта. А GlobalSize вернул его размер == 4. Тут же выделяю 1 байт. И всё повторяется для одного байта. Правда в памяти выделенный таким образом блок вместе со служебной информацией занимает 32 байта. А служебная информация выравнивается по 16-байтной границе. Сами попробуйте провести такие эксперименты в любой проге и посмотрите под дебаггером, что он покажет. ЗЫ Эти результаты были получены в WindowsXP. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.075 |