我想知道哪一个更好,2个数组或者具有2个数据成员的结构的数组。 我想要关于以下方面的见解:2数组vs 2个数据成员的结构阵列
- struct是一种包含额外内存的包装吗?我知道结构中的填充符合词的限制。
- 如果我想同时访问两个数据成员,哪一个更快?我认为它的结构阵列。
- 由于结构填充的可能性,一个结构的数组可能会占用比2个数组更多的内存。
在一般情况下和语言特定的答案都是受欢迎的。
请不要建议看看SoA和AoS问题,已经这样做了。
我想知道哪一个更好,2个数组或者具有2个数据成员的结构的数组。 我想要关于以下方面的见解:2数组vs 2个数据成员的结构阵列
在一般情况下和语言特定的答案都是受欢迎的。
请不要建议看看SoA和AoS问题,已经这样做了。
这完全取决于你想要做什么,既不是答案总是“正确”。
外特定于编译器的填充物,除非你把它虚拟的结构不占用任何额外的内存,在这种情况下,它会得到一个虚函数表指针,但仅此而已。
只要您的计算机具有足够大的缓存以容纳两页(通常每个4KB,但检查特定的CPU),则无关紧要,您应该选择哪一个更容易工作与你的代码更有意义。结构数组将使用一个页面,并导致每加载一个4KB的结构会导致一次高速缓存未命中,而值的数组将加载两个导致两次高速缓存未命中的页面。如果你碰巧正在使用一个只允许一个缓存用于你的程序数据的dinky缓存,那么是的,使用一个结构数组将会快得多,因为替代方法会导致每次读取都会导致缓存未命中。
与#1相同的答案 - 数组永远不会有自己的填充,但是一个结构体可能会使用编译器内置的填充。
虽然struct padding完全取决于你的编译器,它可能有标志来打开或关闭它或设置最大焊盘尺寸或其他。检查对象数组的原始数据以查看它们是否有填充,如果有,请在需要时使用编译器了解如何在编译器中关闭该数据。
你正在使用什么编译器,你想用你的项目做什么?
也许更重要的是:你的项目在哪个阶段,你是否遇到过速度问题?预先优化是所有弊端的根源,而且你可能会浪费你的时间担心这个问题。
不要忘记保持数据在一起的一个重要原因:代码可读性。如果您打算独立处理每个字段的不同线程。如果您使用阵列,可能会提高性能。
这只是一个想法,我只是想解决一个编程问题。 –