我有这个代码:
typedef struct
{
int a[4];
} ArrStruct;
void printSizeOfArray(ArrStruct arrStruct)
{
printf("%lu\n", sizeof(arrStruct.a));
++(arrStruct.a[2]);
}
int main()
{
int it;
ArrStruct arrStruct;
printSizeOfArray(arrStruct);
for (it = 0 ; it < sizeof(arrStruct.a)/sizeof(int); ++it)
{
printf("%d, ", arrStruct .a[it]);
}
return 0;
}
有人告诉我,与下一个代码相比,它没有良好的运行时/内存性能。有什么区别?
void printSizeOfArray(int a[])
{
printf("%lu\n", sizeof(a));
++(a[2]);
}
int main()
{
int it;
int a[4] = {0};
printSizeOfArray(a);
for (it = 0 ; it < sizeof(a)/sizeof(int) ; ++it)
{
printf("%d, ", a[it]);
}
return 0;
}
为什么第二个代码会有更好的性能?
最佳答案
在第一个代码中,结构体ArrStruct
是按值使用的,因此,在函数printSizeOfArray
中,结构体的成员a
不会被转换为指针。因此,堆栈上将会有更多的 4 * sizeof(int) - sizeof(int *)
(加上潜在的填充字节)。检查生成的程序集,了解第一个代码还是第二个代码效率更高。
理论上,第二个代码会运行得更快,因为取消引用更少。但是,打开优化后,没有显着差异。
关于c - 数组处理的性能差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13235572/