|
|
1
1
如果基类有一个特定的对齐要求,那么任何派生类都将至少有该对齐要求(由于它们自己的成员,它们可能会得到更严格的对齐要求)。否则,编译器无法保证访问基成员将满足它们的要求。
|
|
|
2
0
因此,虽然编译器支持确实存在差异,可以更改,受到挑战等,但它也可能在其中一个编译器上严重利用不足;这取决于您包含的优化器和类型,当然也取决于矢量器的选择。再说一遍,不清楚你在做什么,有什么用。 加州的declspec(align(16))和uu属性 ((对齐(16)))用于gcc。如果这有帮助的话,最好让我们知道,在这个例子中,哪些编译器警告或错误是有效的或无效的。出于各种原因,我也会避免使用任何智能指针。 sizeof在您的问题中表示您还面临变量数组和指针类型方面的挑战,在这种情况下,前者可能会有问题。即使你可以忍受失去复制构造函数和赋值工具,检查机器代码也不会有什么坏处。也就是说,如果出现复杂情况,您需要做的是查看输出,如果是VC++,则切换到Intel以在Windows中获得更好的提示,并尽早测试/compilet和运行时断言/陷阱故障,或者选择任何免费的对象文件分析工具。然后你就可以用一种最理智的方式来处理那些明显有问题的结构,这总是可能的。 |
|
|
3
0
我们在PARISC HPUX上遇到了类似的问题,其中唯一的原子构造是需要16字节对齐的4字节原子清除。
struct Stupid_HPUX
{
int 4byteLockWordInHere[4] ;
} ;
并在运行时选择正确的一个。对于你的问题,你可以做类似的事情 union rawMemory
{
int blah[(sizeof(yourtype) + 16)/4] ;
char c[1] ;
} u ;
然后使用带有运行时确定的地址的placement new来修复所需的位置。 |
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |