На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
  
> Получить максимальный/текущий размер стека. , Borland C++ Builder v.6.0.
    Сначала хочу разобраться в определениях, чтобы все было верно.

    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] помещается исправно - заполняется значениями в форе без вылетов.
      Осторожно на сцылку в сообщении топик-стартера Кошмарский у меня выдает
      объект заражен 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()
        В соответствие с WinAPI по дефолту 1Мб выделяется (в 32битах; в 64х беспонятия). Но это можно переопределить при создании отдельно взятой нитки или указать линкеру, чтоб он в заголовок EXEхи воткнул нужную цифру для главной нитки. Только надо ли? Делаешь в хипе или в глобальной секции. В классе если, всё равно в хипе получится, так VCL устроена.

        Добавлено
        P.S. А чё, STL в Билдер не завозили? std::vector<std::vector<float> > fff(32, std::vector<float>(32000)) работало ещё 22 года назад
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0175 ]   [ 16 queries used ]   [ Generated: 28.04.24, 06:22 GMT ]