Предположим, что у меня есть функция, вызванная из замкнутого цикла, которая выделяет несколько массивов POD (без конструкторов) в стеке в одном сценарии, а я распределяю массивы динамически один раз и повторно их использую на каждой итерации. Локальные массивы добавляют затраты времени выполнения или нет?Какова стоимость создания больших локальных массивов в стеке на C и C++?
Как я понимаю, выделение локальных переменных POD сводится к сдвигу указателя стека, поэтому это не имеет большого значения. Тем не менее, несколько вещей, которые приходят на ум, что потенциально может повлиять на производительность:
Проверка на переполнение стека - кто и когда делает эти проверки, как часто? На некоторых системах стеки могут расти автоматически, но опять же, я об этом мало знаю.
Кэширование: это стек, обработанный особым образом кэшем ЦП или он не отличается от остальной информации?
Являются ли переменные массивы различными по отношению к вышеуказанному? Скажем, для массивов с постоянным размером стек может быть каким-то образом предварительно распределен (или предварительно вычислен с помощью компилятора?), Тогда как для вариативных есть что-то еще, что добавляет затраты времени исполнения. Опять же я понятия не имею, как это работает.
Выберите язык. Это разные языки с очень разными компиляторами. И укажите свою платформу – kfsone
C++ не имеет массивов переменной длины. – kfsone
@kfsone: для них нет стандартного синтаксиса (но), но обычно можно получить автоматическое хранилище переменной длины через '_alloca()' –