powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как работает HeapCreate
6 сообщений из 6, страница 1 из 1
Как работает HeapCreate
    #39437215
AskingCpp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте,

HANDLE WINAPI HeapCreate(
_In_ DWORD flOptions,
_In_ SIZE_T dwInitialSize,
_In_ SIZE_T dwMaximumSize
);

В документации, в описание 3 параметра написано:
The HeapCreate function rounds dwMaximumSize up to a multiple of the system page size and then reserves a block of that size in the process's virtual address space for the heap. To determine the size of a page on the host computer, use the GetSystemInfo function.

соответственно вызов функции с параметрами
Код: plaintext
1.
HeapCreate(0, 0, 512);


должен создать кучу с максимально возможным размером SYSTEM_INFO.dwPageSize, у меня это 4096

Код: plaintext
1.
HeapWalk(hp, &hpEntry);


hpEntry.Region.dwCommittedSize равняется 4096,

но максимально выделить я могу только 2880 байт
Код: plaintext
1.
unsigned char *buffer = static_cast<unsigned char*>(HeapAlloc(hp, 0, 2880));



Почему так? Что я упустил?
...
Рейтинг: 0 / 0
Как работает HeapCreate
    #39437223
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для начала ошибку посмотри
Код: plaintext
1.
GetLastError()
...
Рейтинг: 0 / 0
Как работает HeapCreate
    #39437255
AskingCpp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

Из документации к HeapAlloc
If the function fails, it does not call SetLastError. An application cannot call GetLastError for extended error information.

Если функцию запустить с возможностью исключений, то
0xC0000017: Not Enough Quota (parameters: 0x00000B50).
...
Рейтинг: 0 / 0
Как работает HeapCreate
    #39437260
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поиск .
Если почитать по ссылкам, то получается, что исключение кидает HeapAlloc , для которого сказано: "Memory allocated by HeapAlloc is not movable".
...
Рейтинг: 0 / 0
Как работает HeapCreate
    #39437269
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AskingCpphpEntry.Region.dwCommittedSize равняется 4096,

но максимально выделить я могу только 2880 байт
Как предположение: служебная инфа для управления кучей там же хранится, т.е. 2880 это то свободное место что осталось от 4096
...
Рейтинг: 0 / 0
Как работает HeapCreate
    #39437289
AskingCpp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,
Так оно и есть, если вызвать HeapCreate с опцией HEAP_NO_SERIALIZE, то выделить можно уже 2904
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как работает HeapCreate
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]