AMA*_*AMA 5 c++ struct memory-alignment
给定
template <typename T>
struct Vector3d { T x, y, z; };
Run Code Online (Sandbox Code Playgroud)
是否可以安全地假设x,y和z位于连续的内存位置中?
假设for T = float和至少安全T = double吗?
如果不是,是否可以跨平台执行?
注意:只要x,y,z是连续的,我就不介意在z之后填充
假设 x、y 和 z 位于连续的内存位置是否安全?
从技术上讲,该语言没有这样的保证。
另一方面,它们也没有必要不连续,而且在实践中它们很可能是连续的。
如果没有,是否可以跨平台方式强制执行?
保证对象位于连续内存位置的跨平台方法是数组:
template <typename T>
struct Vector3d { T components[3]; };
Run Code Online (Sandbox Code Playgroud)
数组还使得使用指针算术来迭代对象变得合法。