Код: Выделить всё
var a : array of byte;
...
SetLength (a, 1000000000);// хочу аллокейтить 1Гб
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
Код: Выделить всё
var a : array of byte;
...
SetLength (a, 1000000000);// хочу аллокейтить 1Гб
Код: Выделить всё
var a: PChar;
b: Byte;
GetMem(a, 1000000000);
A[1234] := chr(b); // работает с элементами таким образом.
b := Byte(a[1234]); // и таким :)
...
FreeMem(a);
Герб Саттер (недавно тут читал) пишет это уже не актуально.И не забывайте все места, где потенциально возможна ошибка (а любое выдылыние памяти, причем не зависимо от размера это однозначно одно из таковых!) заключать в try...except...end.
По крайней мере, в Виндах это не так. Если запросишь слишком много = получишь кукиш, а не указательна современных ОС любое выделение памати зачастую заведомо успешно.
Корректно обработать ошибку выделения памяти можно только в институтской лабе, которая просит пользователя вести размер массива, что-то делает с этим массивом а потом выходит. В серьезной программе если эта ошибка и возникает, то всегда в деликатный момент, когда отваливаться нельзя. За последние несколько лет я сталкивался с OutOfMemory только один раз в Java (там всегда есть потолок на размер хипа). Дык к тому моменту, когда программа понимала что что-то не так, логгер (log4j) уже был мертв. И умирала прога по тихому. Писали эту программу очень аккуратные люди, обработка ошибок была организована грамотно. log4j тоже писали грамотные люди.Если есть возможность откатиться без фатального вылета - ей надо пользоваться по-любому, хотя бы для уяснения причин ошибки