我正在重载
现在我面临的问题是,我有一个子类
我可以简单地强制将所有分配都设置为16字节,这样可以正常工作,直到出现32字节对齐的类型。在
我知道
operator new
,但最近遇到了对齐的问题。基本上,我有一个类IBase
,它提供了所需的所有变体的operator new
和delete
。所有类都是从IBase
派生而来,因此也使用自定义分配器。现在我面临的问题是,我有一个子类
Foo
,它必须16字节对齐,而其他所有类在对齐到8字节时都可以正常工作。然而,我的内存分配器默认仅对齐到8字节边界,因此IBase::operator new
中的代码返回了一个无法使用的内存块。这应该如何正确地解决?我可以简单地强制将所有分配都设置为16字节,这样可以正常工作,直到出现32字节对齐的类型。在
operator new
中找到对齐方式似乎并不容易(我能在那里做一个虚函数调用来获取实际的对齐方式吗?)。处理这个问题的推荐方法是什么?我知道
malloc
应该返回适合一切的内存块,但不幸的是,“一切”不包括SSE类型,我真的想让这个工作正常,而不需要用户记住哪个类型具有哪种对齐方式。