Переменная длина C99 автоматическая производительность массива

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

int function(int N) {
    double array[N];
  • наверху по сравнению с выделением массива перед рукой (принимающий функцию назван многократно),

  • наверху по сравнению с использованием нового

  • наверху по сравнению с использованием malloc

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

5
задан sth 10 June 2010 в 23:19
поделиться

3 ответа

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

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

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

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

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

6
ответ дан 13 December 2019 в 19:21
поделиться
  • Просмотрите вывод сборки
  • Профилируйте его для вашего приложения
  • Проверьте использование памяти
0
ответ дан 13 December 2019 в 19:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: