1) Неизвестно по какой причине, но в Delphi в модуле Windows отсутствует ряд констант, описывающие флаги, используемые при работе с кучей. С другой стороны, в заголовочных файлах от Microsoft, включенных в пакет Visual Studio присутствует ряд дополнительных констант, не описанных в SDK. Я не стал брать на себя риск и описывать эти константы при переводе главным образом по той причине, что мне неизвестно, на каких платформах поддерживаются эти константы, а также всевозможные ньюансы при их использовании. Тем не менее смысл многих констант легко взять из их названия. Ниже идет список этих констант с их значениями:
| Константа | Значение |
|---|---|
| HEAP_NO_SERIALIZE | $00000001 |
| HEAP_GROWABLE | $00000002 |
| HEAP_GENERATE_EXCEPTIONS | $00000004 |
| HEAP_ZERO_MEMORY | $00000008 |
| HEAP_REALLOC_IN_PLACE_ONLY | $00000010 |
| HEAP_TAIL_CHECKING_ENABLED | $00000020 |
| HEAP_FREE_CHECKING_ENABLED | $00000040 |
| HEAP_DISABLE_COALESCE_ON_FREE | $00000080 |
| HEAP_CREATE_ALIGN_16 | $00010000 |
| HEAP_CREATE_ENABLE_TRACING | $00020000 |
| HEAP_MAXIMUM_TAG | $0FFF |
| HEAP_PSEUDO_TAG_FLAG | $8000 |
| HEAP_TAG_SHIFT | 18 |
В Delphi также не описан следующий макрос, относящийся к куче, ниже представлена его реализация в Delphi.
function HEAP_MAKE_TAG_FLAGS(b, o: DWORD): DWORD; begin Result := b + o shl 18; end;
TProcessHeapEntry |
Memory SDK ![]() |
© Mystic, 2002