Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.119.255.31] |
|
Сообщ.
#1
,
|
|
|
Сначала хочу разобраться в определениях, чтобы все было верно.
1. int ttt[4] - массив создается в стеке. 2. int ttt = new int[4] - массив создается вне стека. 3. Стек ограничен по размеру, поэтому моя попытка заполнить созданный "корректно" float fff[32][32000] приводит к StackOverflow. 4. Массив вне стека ограничен только свободной RAM в системе. Почему спрашиваю. Например, в этом примере (абзац Stack Overflow) утверждается, что стек бесконечен. https://www.helloworld.ru/texts/comp/lang/d...4/FindError.htm О самой проблеме. Нужно знать максимальный размер стека, чтобы понять, какой максимальный по размерности массив можно туда запихнуть. К примеру, float fff[32][1000] помещается исправно - заполняется значениями в форе без вылетов. |
Сообщ.
#2
,
|
|
|
Осторожно на сцылку в сообщении топик-стартера Кошмарский у меня выдает
объект заражен HEUR:Trojan.Script.Redirector.gen Добавлено Цитата Сергей85 @ 1. int ttt[4] - массив создается в стеке. 2. int ttt = new int[4] - массив создается вне стека. 3. Стек ограничен по размеру, поэтому моя попытка заполнить созданный "корректно" float fff[32][32000] приводит к StackOverflow. 4. Массив вне стека ограничен только свободной RAM в системе. Насколько я помню: Если объявляешь массив или переменную внутри функции - размещение произойдет на стеке. Если же объявишь как static, то в куче будет твой массив. Если объявишь как глобальные (вне функций), то тоже всё будет в куче. В куче можно жрать памяти дохрена и больше. Если приспичит именно внутри ф-ии что-то делать огромное, то используй выделение памяти на куче через: malloc() (и подобные) и free() |
Сообщ.
#3
,
|
|
|
В соответствие с WinAPI по дефолту 1Мб выделяется (в 32битах; в 64х беспонятия). Но это можно переопределить при создании отдельно взятой нитки или указать линкеру, чтоб он в заголовок EXEхи воткнул нужную цифру для главной нитки. Только надо ли? Делаешь в хипе или в глобальной секции. В классе если, всё равно в хипе получится, так VCL устроена.
Добавлено P.S. А чё, STL в Билдер не завозили? std::vector<std::vector<float> > fff(32, std::vector<float>(32000)) работало ещё 22 года назад |