Глядя на этот вопрос: Why does a C/C++ compiler need know the size of an array at compile time ?, мне пришло в голову, что разработчики компилятора должны были иметь несколько раз, чтобы получить свои ноги теперь (это часть стандарта C99, это 10 лет назад) и обеспечивают эффективные реализации.Накладные расходы переменной длины в C++?
Однако по-прежнему кажется (из ответов) считаться дорогостоящим.
Это меня как-то удивляет.
Конечно, я понимаю, что статическое смещение намного лучше, чем динамическое с точки зрения производительности, и в отличие от одного предложения я бы не имел на самом деле компилятор, выполняющий распределение кучи массива, поскольку это, вероятно, стоило бы еще больше [это не измерялось;)]
Но я до сих пор удивлен предполагаемой стоимости:
- если нет VLA в функции, то не было бы любой ценой, насколько Я вижу.
- Если есть один VLA, то можно либо поместить его до или после всех переменных, и, следовательно, получить статическое смещение для большей части фрейма стека (или, как мне кажется, но я не хорошо разбираюсь в управлении стеками)
Возникает вопрос о нескольких VLA, конечно, и мне было интересно, будет ли иметь выделенный VLA-стек. Это означает, что VLA будет отображаться счетчиком и указателем (из известных размеров), а фактическая память, взятая во вторичном стеке, используется только для этой цели (и, следовательно, действительно является стеком).
[перефразируя]
Как Власа реализованы в GCC/VC++?
Действительно ли это действительно впечатляет?
[конец перефразировка]
Мне кажется, это может быть только лучше, чем при использовании, скажем, vector
, даже с нынешними реализациями, так как вы не берете на себя стоимость динамического распределения (по стоимости не изменять размер).
EDIT:
Существует частичный ответ here, однако сравнение Власа к традиционным массивам показаться несправедливым. Если бы мы знали размер заранее, то нам не понадобилось бы VLA. В том же вопросе AndreyT дал некоторые указания относительно реализации, но это не так точно, как хотелось бы.
@Matthieu M. Deleted. Я должен думать о чем-то другом. – 2010-12-03 09:06:28
@Matthieu: вы думаете, кажется мне здоровым ... VLA предлагает только накладные расходы, когда их больше 1 (просто поместив их «после» элементов известного размера, а затем может быть указатель или дополнительная настройка в стек известного знака-смещения, чтобы указать, где начинаются последующие VLA. Не удается увидеть второй стек, который помогает вообще. – 2010-12-03 09:19:14