Цитата |
---|
TSS пишет: бысрее всего, имхо, hashtables, память выделять можно и стандартным malloc() -- работает достаточно эффективно. Если есть ограничения на размеры строк -- можно большими блоками с индексацией по N-байт |
hashtables, это что? я знаю только основу всей памяти - virtual memory, и производную от нее - heap... разве есть еще какая-то? если есть раскажи плз...
Цитата |
---|
TSS пишет:
Смотри исходники библиотеки. Вкратце скажу -- если malloc вернул тебе адрес 0x12000020, то по адресу 0x12000000 находится структура с данными по этому блоку памяти =) Смещения и размеры не помню, но идею, думаю, поймешь =) |
ну вопервых, как я уже говорил, пишу без ртл, поэтому у меня нет маалока
а есть только кернел винды... исходники которого я соответственно прочитать не могу... но это и не суть важно, мне просто стало интересно, как функции очистки памяти принемая в параметр поинтер на войд могут знать сколько убивать
Цитата |
---|
TSS пишет:
Цитата |
---|
Pharaoh пишет: еще вопрос: есть куча, я получаю в ней скажем килобайт, потом первые три байта освобождаю, в памяти образуется дырка в три байта (что-то типа фрагментации)... что с ней делать и предусматривает ли это система при работе с кучей? |
Это как это ты так делаешь ? |
так:
void * pMemFirst=0;
void * pMemSecond=0;
pMemFirst=HeapAlloc(GetProcessHeap(),0,16);
pMemSecond=HeapAlloc(GetProcessHeap(),0,1024);
HeapFree(GetProcessHeap(),0,pMemFirst);
по логике вещей, эти куски выделятся друг за другом... так?
по симу два вопроса: первый - что система будет делать с теми 16 байтами? второй - как система узнает, что удалить надо 16 байт, если я этого явно не говорю... она хранит данные о выделении в кучи гдето еще или как? затрудняюсь...
а, да и еще: если знаешь, подскажи плз, где выделяется память под переменные, объявленные стандартным образом, типа char c[1024], и можно ли ее как-то освободить?
зы: тебя трудно цитировать
...