Если такая тема была =) не убивайте меня. Подскажите как можно сделать динамический массив? чтобы его можно было без проблем увеличивать и уменьшать, ну вобщем ясно.
>SEH+COMMIT/DECOMMIT подойдет Я что-то сам не понял, зачем такой совет GlobalAlloc->GlobalLock, надо изменить-> копируешь, грохаешь старую, делаешь новую и назад.
FaceOFF, общая идея: Код (Text): invoke VirtualAlloc,0,DO_FIGA,MEM_RESERVE ставишь SEH, в SEH'e: Код (Text): invoke VirtualAlloc,GDE_VIOLATION,1,MEM_COMMIT xor eax,eax Пользуешь, и не забываешь: Код (Text): invoke VirtualFree yureckor, IMHO какой-то извращенский способ, проще уж со списками работать. PS: GlobalXXX - старьё
masquer Простите я не понял Ведь IMHO это описание реализации разряженного массива, а не динамического...
masquer Я имею в виду, что размер виртуальной памяти занимаемой динамическим массивом IMHO должен по идее увеличиваться постепенно, а в данном случае нужно заранее зарезервировать большой объем виртуальной памяти которая может быть нужна для других целей.
SEH+COMMIT/DECOMMIT вполне подойдет. Это более общий вариант. А вам нужен разреженый с конца массив. Но я бы предложил иерархический вариант с ручным добавлением/удалением хвоста (не люблю SEH). Делаем структуру, содержащую информацию о используемом/зарезервированом к-ве элементом и массив указателей на (к примеру 265-элементные) блоки. При необходимости добавить новый блок Realloc нужно делать только на маленький list. И то не каждый раз, если резервировать место. К этому прилагается ф-ция доступа к i-му элементу GetElementPtr(int i) { return (header->list[i/256])+i%256}; } Очень хорошо оптимизируется.