我试图在没有堆的情况下实现pimpl(从a SO question改编)
我想我应该自己保留char[]
,然后硬编码alignment = 8
但是,我对C ++对齐很新。我担心8还不够。
经过一些阅读后,我了解alignof
是maximum size of internal field。
我已经尝试过: -
struct A { //size = 16 alignof = 8 (max{4,1,8})
int n; //address = [0,4)
bool flag; //address = [4,5)
double k; //address = [8,16)
};
struct B{ //size = 24 alignof = 8 (max{A,1})
A a; //address = [0,16)
char c; //address = [16,24) 24=16+8(align)
};
从实验中,我认为我的pimpl的对齐应该是= 8(保守) 只要最大原始尺寸为8,它应该是安全的 参考: largest primitive type has at least 8 bytes.(但我们假设它实际上是8个字节)
是否有任何我应该设置对齐的情况> 8?
换句话说,对于所有实际情况,8个字节是否足够?
我相信答案是“它是安全的”,但a SO question让我感到困惑 以下是问题的一部分: -
“memset_16aligned”函数需要传递一个16byte的对齐指针,否则会崩溃。
我也读过: -