C99 автоматическая производительность массива переменной длины - PullRequest
5 голосов
/ 11 июня 2010

Существуют ли значительные накладные расходы процессора / памяти, связанные с использованием автоматических массивов с g ++ / Intel на 64-разрядной платформе x86 linux?при условии, что функция вызывается несколько раз)

служебных данных по сравнению с использованием новых

служебных данных по сравнению с использованием malloc

Диапазон N может быть примерно от 1 до 16 КБ, переполнение стека не является проблемой.

Ответы [ 3 ]

6 голосов
/ 11 июня 2010

Разница в производительности между VLA и массивом статического размера должна быть незначительной.Возможно, вам понадобится несколько дополнительных инструкций, чтобы вычислить, как вырастить стек, но это должно быть шумом в любой реальной программе.

Хм, если подумать, возможны и дополнительные издержки, зависящие от того, как локальные переменные расположены в памяти, и от наличия нескольких VLA.

Рассмотрим случай, когда у вас есть локальные переменные.(и предположим, что они помещены в память в указанном порядке).

int x;
int arr1[n];
int arr2[n];

Теперь, когда вам нужно получить доступ к arr2, код должен вычислить местоположение arr2 относительно вашегобазовый указатель.

0 голосов
/ 11 июня 2010
  • Просмотр выходных данных сборки
  • Профиль, для вашего приложения
  • Проверьте использование памяти
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...