Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Максимальный размер статического массива [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)


Стек - он не резиновый


Наверх

Титульная страница Поиск, карта сайта Написать письмо