![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как освободить память от массива [D6, Win95/98, NT4]
mazepa © (2002-06-15 12:01:00)Использовав массив довольно больших размеров хотелось бы навсегда о нем забыть, но он весит в памяти.
Что делать?
Заранее благодарен.
NailS (2002-06-15 18:32:00) [1]
> mazepa © (15.06.02 15:45)
> Все понятно... это значит что меня кинули с D6 подсунув
> не Delphi6 a Dermo6...
;) А ты на С++ перейди, там точно получится ;)))))), тебе, как человеку с высшим образованием, это должно быть известно.
2 All,
Сорри за флейм, не сдержался.
SPeller (2002-06-15 17:22:00) [2]2 mazepa © (15.06.02 15:45)
Объявляем динамический массив
var dmas: array of byte;
Он имеет нулевую длину, соответственно памяти не "хавает". Затем раздуваем его до 50 Мб
setlength(dmas,50000000);
Делаем с ним всё что надо, а в конце высвобождаем отведённую ему память
setlength(dmas,0);
Вот и всё, всё прекрасно работает и D6 ниразу не ругается. А статический массив будет "хавать" память до тех пор, пока не выйдешь из процедуры, в которой он объявлен. Ты только подумай, если бы не освобождались все переменные всех функций, то что бы тогда было?
mazepa (2002-06-15 15:45:00) [3]Все понятно... это значит что меня кинули с D6 подсунув не Delphi6 a Dermo6...
Спасибо за содержательную беседу.
Anatoly Podgoretsky (2002-06-15 15:40:00) [4]С динамическом массивом все получается, даже для такой маленькой длниы, а вот статическим у тебя ничего не получится, вдумайся только в понятия статический динамический
mazepa (2002-06-15 15:36:00) [5]Не знаю о чем ты там думаешь но не кто не пытается и даже не пробовал пытатся работать таким образом...
Уточняю: если не получатся Setlength(...) для дин.мас. такой длинны то как освободить память от стат.мас. ???
Anatoly Podgoretsky (2002-06-15 15:28:00) [6]Так ты что пытаешься со статическим массивом работать как с динамическим? Камиадзе.
mazepa (2002-06-15 15:07:00) [7]Ругань компилятора я не помню т.к. нахожусь на работе, где D6 временно был удален. А определение массива я уже приводил (смотри выше)...
Anatoly Podgoretsky (2002-06-15 14:57:00) [8]Видимо тебе ответ не нужен, раз ты не приводишь ни определение массива, ни выделение памяти, ни даже ругани компилятора
NailS (2002-06-15 14:45:00) [9]Каких ругательств?
mazepa (2002-06-15 14:34:00) [10]В данном случае: не проходит без ругательств со стороны D6.
Anatoly Podgoretsky (2002-06-15 14:30:00) [11]Трудно сказать, ты же не приводишь потребностей, но одназначно можно сказать, что у других работает.
А как переводится слово "хавать"?
mazepa (2002-06-15 14:24:00) [12]Почему то D6 не хавает setlength(buf,50000000) вот в чем весь косяк. Может что то надо сделать перед объявлением длинны?
Anatoly Podgoretsky (2002-06-15 14:18:00) [13]Это статический массив, тебе же нужен динамический buf:array of byte; или самому выделять память через GetMem
mazepa (2002-06-15 14:12:00) [14]что то типа buf:array[0..50000000] of byte;
Anatoly Podgoretsky (2002-06-15 13:33:00) [15]mazepa © (15.06.02 12:29)
Борланд и мировое сообщество с тобой не согласны
VictorT (2002-06-15 13:30:00) [16]Я не большой знаток Паскаля, возник вопрос. А можно ли уже в Паскале обьявлять переменные в любом месте программы, как в Си. Просто в Си переменые удаляются, как только уходят из области видимости, как в этом плане в Паскале? Это ведь тоже один из способов решения проблемы.
Malder (2002-06-15 12:53:00) [17]mazepa, как ты объявляешь статический массив длиной в 50 Mb ?
MBo (2002-06-15 12:47:00) [18]Ей это подвластно
Malder (2002-06-15 12:45:00) [19]А как ты объявляешь массив длиной в 50 Mb ?
mazepa (2002-06-15 12:29:00) [20]Write to: Anatoly Podgoretsky
Тогда подскажи пожалуйста как установить длинну в 50Мб.
Про setlength можно забыть - это ей не подвластно ???