有没有办法在编译时检测一个类是否有 vtable?我试图确保一个类与 64 字节边界对齐并且长度为 64 字节。添加 vtable 会将类大小增加到 128 字节。
class __attribute__((aligned(64))) C
{
private:
int64_t iValue;
char iPadding[64 - sizeof(int64_t)];
};
这可以。然而
class __attribute__((aligned(64))) C
{
public:
virtual ~C() {}
private:
int64_t iValue;
char iPadding[64 - sizeof(int64_t)];
};
搞砸了。
答:aligned
也是垫,不只是控制位置。__declspec(align())
似乎也这样做!
编辑:仍然迷惑。在检查可被 64 整除的检查的构造函数中C
进行检查后,如果不是,则出现异常,我得到了异常。最初我虽然它可能与堆栈上的实例有关,但是在将它们更改为基于堆之后,对齐检查仍然失败。我将回到一个调用并就地执行的工厂函数(这可能是最终会做的)this
throw
C
posix_memalign
new
std::aligned_storage