对齐8个字节是不够的?

时间:2017-03-21 09:51:56

标签: c++ alignment pimpl-idiom

我试图在没有堆的情况下实现pimpl(从a SO question改编) 我想我应该自己保留char[],然后硬编码alignment = 8 但是,我对C ++对齐很新。我担心8还不够。

我的研究

经过一些阅读后,我了解alignofmaximum 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的对齐指针,否则会崩溃。

我也读过: -

0 个答案:

没有答案