![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Максимальный размер статического массива [D7, XP]
Чайник © (2007-03-05 16:47:00)Какой максимальный размер статического массива я могу задать?
Например: Buff : array [1..500, 1..500, 0..2] of byte; - проходит,
а Buff : array [1..1280, 1..1024, 0..2] of GLubyte; - выдает EStackOverFlow, причем не в момент компиляции, а при вызове процедуры, в которой этот массив описан.
Германн (2007-03-07 02:01:00) [1]А о чём собс-но спик? В стек нужно записывать адрес переменной указывающей на массив. И всё!
Чайник (2007-03-07 01:52:00) [2]
> Сергей М. © (06.03.07 09:38) [15]
>
> > Чайник © (05.03.07 17:38) [10]
>
> > увеличил размер стека .. все заработало.
>
> Ну и в чем прелесть такого подхода ?
> А завтра тебе вздумается еще на порядок-другой увеличить
> размер массива - что, опять с линкером играться будешь ?
> Стек же не резиновый..
Да нет конечно, это я так, для общего развития. Массив я, разумеется, сделал динамическим.
begin...end (2007-03-06 17:24:00) [3]> Сергей М. © (06.03.07 09:33) [14]
Эта... а может, не засорять мОзги, и пользоваться вроде как давно устоявшейся терминологией? Ну, типа, статический массив -- это массив, размер которого определён на этапе компиляции, и объявление которого имеет видarray [диапазон] of TMyType... Я, например, слово "статический" здесь понимаю как "имеющий постоянный размер", и вовсе не вижу связи этого термина с особенностями выделения памяти.
Сергей М. (2007-03-06 09:38:00) [4]
> Чайник © (05.03.07 17:38) [10]
>
>
> увеличил размер стека .. все заработало.
Ну и в чем прелесть такого подхода ?
А завтра тебе вздумается еще на порядок-другой увеличить размер массива - что, опять с линкером играться будешь ? Стек же не резиновый..
Сергей М. (2007-03-06 09:33:00) [5]
> Leonid Troyanovsky © (05.03.07 17:19) [9]
> Он же не станет динамческим
Конечно не станет.
Но при этом он уже перестает быть статическим, ибо статика имеет отношение не иначе как к compile/build-time, манипуляции же со стеком при распределении памяти под лок.переменные п/программ - это уже run-time, посему статикой здесь не пахнет.
novill (2007-03-06 09:24:00) [6]Господа, оставьте, случай клинический.
Loginov Dmitry (2007-03-05 22:05:00) [7]> Вот пример для второго варианта:
Для третьего то бишь...
Loginov Dmitry (2007-03-05 22:04:00) [8]Не трожь стек! Есть другие варианты:
- использовать глобальные массивы
- использовать динамические массивы
- самому выделять и освобождать память для массива
Вот пример для второго варианта:
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;
Чайник (2007-03-05 17:38:00) [9]
> Сергей М. © (05.03.07 17:10) [6]
> К тому же СТАТИЧЕСКИЙ массив НИКОГДА не размещается в стеке.
>
Отчего же? Когда я по намеку novillувеличил размер стека в свойствах проекта с $100000 (default) до $400000 - все заработало.
Leonid Troyanovsky (2007-03-05 17:19:00) [10]
> Сергей М. © (05.03.07 17:10) [6]
> К тому же СТАТИЧЕСКИЙ массив НИКОГДА не размещается в стеке.
Отчего же? Он же не станет динамческим, если объявлен
в локальной процедуре.
Кстати, для них (переменных) локальных процедур лимит
не так уж велик 64Кб, кажись.
--
Regards, LVT.
novill (2007-03-05 17:12:00) [11]> [3] Чайник © (05.03.07 17:05)
А свойства проекта смотреть и справку читать?
теоретически до MAXINT
Чайник (2007-03-05 17:10:00) [12]
> Сергей М. © (05.03.07 17:08) [5]
>
> А какокго хрена тебя приспичило размещать массивы столь
> дикого размера именно в стеке ?
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1173103249&n=9
Сергей М. (2007-03-05 17:10:00) [13]К тому же СТАТИЧЕСКИЙ массив НИКОГДА не размещается в стеке.
Так что сие есть бред сивой кобылы.
Сергей М. (2007-03-05 17:08:00) [14]
> Чайник
А какокго хрена тебя приспичило размещать массивы столь дикого размера именно в стеке ?
Сергей М. (2007-03-05 17:06:00) [15]
> Чайник © (05.03.07 17:05) [3]
Сие зависит от ОС и ее настроек.
Чайник (2007-03-05 17:05:00) [16]Так какой максимальныйразмер я могу задать?
Другими словами, какой максимальный размер стека и можно ли его увеличить?
novill (2007-03-05 16:57:00) [17]А где по-твоему хранятся локальные пременные процедуры?
Сергей М. (2007-03-05 16:56:00) [18]
> Чайник © (05.03.07 16:47)
Стек - он не резиновый