Mar*_*ayr 5 c++ memory-alignment multidimensional-array data-structures
在我的代码中,我必须考虑一个数组数组,其中内部数组的尺寸是固定的。为了利用STL算法,将数据实际存储为数组数组很有用,但是我还需要将该数据传递给C库,该库采用扁平化的C样式数组。
能够以可移植的方式廉价地转换(即展平)多维数组将是很棒的。我会坚持一个非常简单的案例,真正的问题是更笼统的。
struct my_inner_array { int data[3]; };
std::vector<my_inner_array> x(15);
Run Code Online (Sandbox Code Playgroud)
是
&(x[0].data[0])
Run Code Online (Sandbox Code Playgroud)
指向大小为45 * sizeof(int)的连续内存块的指针,该内存块包含与x相同的条目?还是我需要担心对齐?恐怕这将对我有用(至少对于某些数据类型和内部数组大小而言),但它不是可移植的。
1 理论上没有。编译器可能决定向 my_inner_array 添加填充。在实践中,我看不出编译器会向其中包含数组的结构添加填充的原因。在这种情况下,创建此类结构的数组不存在对齐问题。您可以使用编译时断言:
typedef int my_inner_array_array[3];
BOOST_STATIC_ASSERT(sizeof(my_inner_array) == sizeof(my_inner_array_array));
Run Code Online (Sandbox Code Playgroud)
4 如果没有虚拟方法,那应该没有任何区别。