例如,内存使用/执行速度是否存在差异。
struct test
{
int a;
float b;
char c;
};
test ar[30];
和
int arr1[30];
float arr2[30];
char arr3[30];
?让我们假装,我们不是在谈论工作舒适度或程序员的事情,只是执行速度/内存使用。
答案 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)