结构数组和相等数组之间的C ++差异

时间:2014-10-14 20:43:20

标签: c++ c arrays memory struct

例如,内存使用/执行速度是否存在差异。

struct test
{
   int a;
   float b;
   char c;
}; 

test ar[30];

int arr1[30];
float arr2[30];
char arr3[30];

?让我们假装,我们不是在谈论工作舒适度或程序员的事情,只是执行速度/内存使用。

3 个答案:

答案 0 :(得分:7)

在内存使用方面肯定。

当您分配test ar[30]时,实际上是在分配:
int - float - char - (padding) - int - float - char - ...

在你的第二个例子中,你正在分配:
int - int - int - .... - float - float - ... - char - ...

所以你的记忆中的布局完全不同,这将对你的表现产生影响(取决于你做什么OFC)

答案 1 :(得分:2)

在执行绩效(速度)方面,由于CPU cache存在差异;即使你要求编译器进行优化。

如果几乎​​一起访问给定结构的所有成员,则会增加位置,并减少缓存未命中。

答案 2 :(得分:1)

就内存大小而言,编译器可能会在结构中添加填充以对齐内存,因此sizeof(test)> sizeof(arr1)+ sizeof(arr2)+ sizeof(arr3)