Форум: "Начинающим";
Текущий архив: 2007.04.01;
Скачать: [xml.tar.bz2];
ВнизМаксимальный размер статического массива Найти похожие ветки
← →
Чайник © (2007-03-05 16:47) [0]Какой максимальный размер статического массива я могу задать?
Например: Buff : array [1..500, 1..500, 0..2] of byte; - проходит,
а Buff : array [1..1280, 1..1024, 0..2] of GLubyte; - выдает EStackOverFlow, причем не в момент компиляции, а при вызове процедуры, в которой этот массив описан.
← →
Сергей М. © (2007-03-05 16:56) [1]
> Чайник © (05.03.07 16:47)
Стек - он не резиновый
← →
novill © (2007-03-05 16:57) [2]А где по-твоему хранятся локальные пременные процедуры?
← →
Чайник © (2007-03-05 17:05) [3]Так какой максимальный размер я могу задать?
Другими словами, какой максимальный размер стека и можно ли его увеличить?
← →
Сергей М. © (2007-03-05 17:06) [4]
> Чайник © (05.03.07 17:05) [3]
Сие зависит от ОС и ее настроек.
← →
Сергей М. © (2007-03-05 17:08) [5]
> Чайник
А какокго хрена тебя приспичило размещать массивы столь дикого размера именно в стеке ?
← →
Сергей М. © (2007-03-05 17:10) [6]К тому же СТАТИЧЕСКИЙ массив НИКОГДА не размещается в стеке.
Так что сие есть бред сивой кобылы.
← →
Чайник © (2007-03-05 17:10) [7]
> Сергей М. © (05.03.07 17:08) [5]
>
> А какокго хрена тебя приспичило размещать массивы столь
> дикого размера именно в стеке ?
http://delphimaster.net/view/9-1173103249/
← →
novill © (2007-03-05 17:12) [8]> [3] Чайник © (05.03.07 17:05)
А свойства проекта смотреть и справку читать?
теоретически до MAXINT
← →
Leonid Troyanovsky © (2007-03-05 17:19) [9]
> Сергей М. © (05.03.07 17:10) [6]
> К тому же СТАТИЧЕСКИЙ массив НИКОГДА не размещается в стеке.
Отчего же? Он же не станет динамческим, если объявлен
в локальной процедуре.
Кстати, для них (переменных) локальных процедур лимит
не так уж велик 64Кб, кажись.
--
Regards, LVT.
← →
Чайник © (2007-03-05 17:38) [10]
> Сергей М. © (05.03.07 17:10) [6]
> К тому же СТАТИЧЕСКИЙ массив НИКОГДА не размещается в стеке.
>
Отчего же? Когда я по намеку novill увеличил размер стека в свойствах проекта с $100000 (default) до $400000 - все заработало.
← →
Loginov Dmitry © (2007-03-05 22:04) [11]Не трожь стек! Есть другие варианты:
- использовать глобальные массивы
- использовать динамические массивы
- самому выделять и освобождать память для массива
Вот пример для второго варианта:
procedure Foo;
type
PBuff = ^TBuff;
TBuff = array [1..1280, 1..1024, 0..2] of GLubyte;
var
Buff: PBuff;
begin
GetMem(Buff, SizeOf(TBuff));
try
{..............}
finally
FreeMem(Buff);
end;
end;
← →
Loginov Dmitry © (2007-03-05 22:05) [12]> Вот пример для второго варианта:
Для третьего то бишь...
← →
novill © (2007-03-06 09:24) [13]Господа, оставьте, случай клинический.
← →
Сергей М. © (2007-03-06 09:33) [14]
> Leonid Troyanovsky © (05.03.07 17:19) [9]
> Он же не станет динамческим
Конечно не станет.
Но при этом он уже перестает быть статическим, ибо статика имеет отношение не иначе как к compile/build-time, манипуляции же со стеком при распределении памяти под лок.переменные п/программ - это уже run-time, посему статикой здесь не пахнет.
← →
Сергей М. © (2007-03-06 09:38) [15]
> Чайник © (05.03.07 17:38) [10]
>
>
> увеличил размер стека .. все заработало.
Ну и в чем прелесть такого подхода ?
А завтра тебе вздумается еще на порядок-другой увеличить размер массива - что, опять с линкером играться будешь ? Стек же не резиновый..
← →
begin...end © (2007-03-06 17:24) [16]> Сергей М. © (06.03.07 09:33) [14]
Эта... а может, не засорять мОзги, и пользоваться вроде как давно устоявшейся терминологией? Ну, типа, статический массив -- это массив, размер которого определён на этапе компиляции, и объявление которого имеет видarray [диапазон] of TMyType
... Я, например, слово "статический" здесь понимаю как "имеющий постоянный размер", и вовсе не вижу связи этого термина с особенностями выделения памяти.
← →
Чайник © (2007-03-07 01:52) [17]
> Сергей М. © (06.03.07 09:38) [15]
>
> > Чайник © (05.03.07 17:38) [10]
>
> > увеличил размер стека .. все заработало.
>
> Ну и в чем прелесть такого подхода ?
> А завтра тебе вздумается еще на порядок-другой увеличить
> размер массива - что, опять с линкером играться будешь ?
> Стек же не резиновый..
Да нет конечно, это я так, для общего развития. Массив я, разумеется, сделал динамическим.
← →
Германн © (2007-03-07 02:01) [18]А о чём собс-но спик? В стек нужно записывать адрес переменной указывающей на массив. И всё!
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.04.01;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.042 c