Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.49 MB
Время: 0.027 c
15-1173259369
Оззя
2007-03-07 12:22
2007.04.01
DelphiGFX умер?


15-1173103271
kichrot
2007-03-05 17:01
2007.04.01
ТЫ ИЗБРАЛ - ТЕБЕ СУДИТЬ!


2-1173110211
pasha star
2007-03-05 18:56
2007.04.01
RichEdit add lines down


15-1173150683
Slider007
2007-03-06 06:11
2007.04.01
С днем рождения ! 6 марта


3-1168937991
pavel_guzhanov
2007-01-16 11:59
2007.04.01
Как проверить содержимое поле типа DateTime на null




   Наверх