是否在64位x86 linux平台上使用带g ++/Intel的自动阵列相关的cpu /内存开销很大?C99可变长度自动阵列性能
int function(int N) {
double array[N];
- 相比分配前手阵列
开销相比相对于使用
malloc
开销(假定函数被调用多次)
开销
N的范围可以是粗略地从1kb到16kb,堆栈溢出不是问题。
是否在64位x86 linux平台上使用带g ++/Intel的自动阵列相关的cpu /内存开销很大?C99可变长度自动阵列性能
int function(int N) {
double array[N];
开销相比相对于使用malloc
开销(假定函数被调用多次)
开销
N的范围可以是粗略地从1kb到16kb,堆栈溢出不是问题。
VLA和静态大小数组之间的性能差异应该可以忽略不计。你可能需要一些额外的指令来计算堆栈的增长量,但在任何真正的程序中都应该是噪声。
嗯,根据进一步的想法,也可能会有一些开销,取决于局部变量如何放在内存中以及是否有多个VLA。
考虑一下你有当地人的情况(并且假设他们按照他们指定的顺序放在内存中)。
int x;
int arr1[n];
int arr2[n];
现在,每当你需要访问arr2
,代码需要计算arr2
相对的位置,您的基本指针。
谢谢。这是我的直觉,只是想加倍肯定。幸运的是,我只需要担心单个VLA阵列 – Anycorn 2010-06-10 23:16:29
你说的自动数组是什么意思? – AraK 2010-06-10 23:01:56
相比,开销是多少? – sth 2010-06-10 23:03:37
我认为他正在讨论在C99版本的语言中添加到C中的变长数组。这是正确的aaa? – 2010-06-10 23:03:50