В 16-битной версии Delphi нельзя сделать это непосредственно. В
новой, 32-битной версии, это как-то можно сделать, но за два месяца колупания я
так и не понял как. (Некоторые бета-тестеры знают как. Не могли бы они сообщить
нам всю подноготную этого дела?)
В 16-битной версии Delphi вам необходимо работать с блоками по 32K или 64K и
картой. Вы могли бы сделать приблизительно следующее:
|
|
type
chunk: array[0..32767] of byte;
pchunk: ^chunk; var
BigArray: array[0..31] of pChunk; |
Для создания массива:
|
|
for i := 0 to high(bigArray)
do
new (bigArray[i]); |
Для получения доступа к n-ному байту в пределах массива (n должен иметь тип
longint):
|
|
bigArray[n shr 15]^[n and
$7FFF] := y;
x := bigArray[n shr 15]^[n
and $7fff]; |
Это даже осуществляет проверку выхода за границы диапазона, если вы
установили в ваших настройках опцию "range checking"!
n должен находиться в диапазоне [0..32*32*1024] = [0..1024*1024] =
[0..1048576].
Для освобождения массива после его использования необходимо сделать
следующее:
|
|
for i := 0 to high(bigArray)
do
dispose (bigArray[i]); | |