почему так говорят?
может там речь про "чем меньше глобальных переменных"?
Это в целом спорно конечно, переменных нужно столько сколько нужно для решения конкретной задачи, как бы это странно не звучало
обычных вроде было
но если можно избежать?
Если можно избежать без каких то костылей то лучше меньше чем больше, если это не ухудшает опять же сложность алгоритма и ещё желательно внешний вид кода
Тут как зависит от ситуации, какие то локальные переменные дешёвые, какие то нет
как узнать хорошо это или плохо? почему говорят. что это плохо?
Только думая головой
Сомнительное какое-то утверждение. В теории если размер объекта ну уж очень большой, то его на стеке (давайте без занудства про то, что стека нет в стандарте С++)) речь о прикладном использовании) хранить может и не выйдет (переполним стек). На практике я с таким за несколько лет не встречался. Был один раз, когда статический анализатор ругался на вероятное переполнение, но там действительно стрёмный объект был, его оптимизировал потом Наверно из теоретической возможности переполнить стек и идёт эта мысль. В частности, много-много переменных может рано привести к переполнению стека, хотя почему-то никто не ругается на рекурсию и множество вложенных вызовов, которые так же стек поджирают. На деле же есть вот что. Во-первых, компиляторы сейчас умные, - умеют оптимизировать ненужные переменные и многое другое. Во-вторых, совет этот даже несколько вредный. Переменные позволяют документировать код. Вот такие вещи плохо читаются: if ( obj.IsAvailableForAction() && is_other_condition_satisfied ) Так понятнее (ясно, что семантически в условии ожидается): const bool is_everything_great = \ obj.IsAvailableForAction() && is_other_condition_satisfied; if (is_everything_great)
Приходи в ядро, 24кб стека в твоем полном распоряжении :))
это всегда так было?
Полностью согласен. Например, вызов метода элемента вложенного контейнера вида database.at("key").at(0).do_smth(arg1, arg2, ..., argN) абсолютно нечитаем. Гораздо лучше: const auto& bucket = database.at("key"); const auto& entry = bucket.at(0); entry.do_smth(arg1, arg2, ..., argN)
~12кб на x86, ~24 на x64... На Windows. После Longhorn (Vista) точно так, насчет более ранних не уверен
Где же наш мегабайт
Стикер
Ну ты же про ядерный стек ?)
Обсуждают сегодня