在64位x86 linux平台上使用带有g ++ / Intel的自动数组是否会产生显着的CPU /内存开销?
int function(int N) {
double array[N];
与先前分配数组相比(假设多次调用函数)开销
开销
与使用malloc
开销
N的范围大致可以从1kb到16kb,堆栈超限不是问题。
答案 0 :(得分:6)
VLA和静态大小的阵列之间的性能差异应该可以忽略不计。您可能需要一些额外的指令来计算堆栈的增长量,但这应该是任何实际程序中的噪声。
嗯,进一步考虑,根据局部变量在内存中的布局以及是否存在多个VLA,也可能会有一些开销。
考虑你有本地人的情况(并假设他们按照指定的顺序放入内存)。
int x;
int arr1[n];
int arr2[n];
现在,只要您需要访问arr2
,代码就需要计算arr2
相对于基指针的位置。
答案 1 :(得分:5)
这是alloca正在做的事情。
答案 2 :(得分:0)