Вопрос
В Бэйсике есть такая вещь: динамические массивы, а как тоже самое реализовать на ассемблере?
Ответ
Я тоже долго мучался над этим, только в с++, но принцип везде один:
создаешь =кучу=, можешь использовать от процесса (GetProcessHeap())
hHeap_=HeapCreate(HEAP_NO_SERIALIZE,0,0);
выделяем память пка под один элемент
ulItemSize_- размер элемента в массиве
lpMem_=HeapAlloc(hHeap_,HEAP_NO_SERIALIZE,ulItemSize_);
ulMemSize_ размер выделенной памяти
ulCount_ кол-во элементов в массиве
======добавка элемента
ULONG ulNewSize_=ulMemSize_+ulItemSize_;
lpMem_=HeapReAlloc(hHeap_,HEAP_NO_SERIALIZE,lpMem_,(ulNewSize_+8));
if (lpMem_) { LPVOID p=((LPSTR)lpMem_+ulMemSize_);
CopyMemory(p,lpItem,ulItemSize_);
ulCount_++;
ulMemSize_=ulNewSize_;
// HeapCompact(hHeap_,0);
return ulCount_;
}
=======ресайзинг массива
ULONG ulNewSize_=(ulNewCount_*ulItemSize_);
lpMem_=HeapReAlloc(hHeap_,HEAP_NO_SERIALIZE,lpMem_,(ulNewSize_+8));
if (lpMem_) { ulCount_=ulNewCount_;
ulMemSize_=ulNewSize_; // HeapCompact(hHeap_,0);
bRet=1;
}
============ доступ к нужному элементу
(lpMem_+(ulItem*ulItemSize_))
Из конференции Expert_FAQ
Copyright 2000-2004 Сообщество Чайников
Контактная информация