Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.01;
Скачать: CL | DM;

Вниз

Максимальный размер статического массива   Найти похожие ветки 

 
Чайник ©   (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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.042 c
3-1167357815
NovaC
2006-12-29 05:03
2007.04.01
ADOQuery & WIN98 v4.10


15-1173536395
mentor-m
2007-03-10 17:19
2007.04.01
Командная строка


1-1170758544
IMHO
2007-02-06 13:42
2007.04.01
File access denied and MkDir


2-1173811838
Костя
2007-03-13 21:50
2007.04.01
Как узнать температуру процессора?


15-1173264718
Keger
2007-03-07 13:51
2007.04.01
Как же приятно поздравлять девушек с праздником!