Там значительный CPU/память наверху связан с использованием автоматических массивов с g ++/Intel на 64-разрядной платформе x86 linux?
int function(int N) {
double array[N];
наверху по сравнению с выделением массива перед рукой (принимающий функцию назван многократно),
наверху по сравнению с использованием нового
наверху по сравнению с использованием malloc
Диапазон N может быть от 1 КБ до 16 КБ примерно, превышенный стек не является проблемой.
Разница в производительности между VLA и массивом статического размера должна быть незначительной. Вам может потребоваться несколько дополнительных инструкций, чтобы рассчитать, насколько увеличить стек, но это должно быть шумом в любой реальной программе.
Хм, если подумать, могут возникнуть некоторые накладные расходы в зависимости от того, как локальные переменные размещены в памяти и есть ли несколько VLA.
Рассмотрим случай, когда у вас есть локальные переменные (и предположим, что они помещаются в память в том порядке, в котором они указаны).
int x;
int arr1[n];
int arr2[n];
Теперь, когда вам нужно получить доступ к arr2
, код должен вычислить местоположение arr2
относительно вашего базового указателя.