СообЧа > База Знаний > Программирование > Assembler

Вопрос

В Бэйсике есть такая вещь: динамические массивы, а как тоже самое реализовать на ассемблере?

Ответ

Я тоже долго мучался над этим, только в с++, но принцип везде один:

создаешь =кучу=, можешь использовать от процесса (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 Сообщество Чайников
Контактная информация