Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.04 c
1-1170845002
Kolan
2007-02-07 13:43
2007.04.01
ReadSectionValues как получить только значения?


2-1173280010
pasha star
2007-03-07 18:06
2007.04.01
OnRestart , OnShutdown..


6-1161425591
Yegorchic
2006-10-21 14:13
2007.04.01
IdHTTP: сколько байт получено/отправлено


1-1170616649
flaxe
2007-02-04 22:17
2007.04.01
Bitmap в ICO


2-1173696204
ANB
2007-03-12 13:43
2007.04.01
Как из делфового TWebBrowser текст HTML документа вытащить ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский