在D中,您可以使用align
关键字对齐struct / class成员,例如:
struct Vec4 { align(16) float[4] elems; }
但是,似乎你不能在堆栈上做同样的事情:
void foo()
{
align(16) float[4] vec; // error: found 'align' instead of statement
}
有没有办法对齐堆栈上的数据?特别是,我想创建一个16字节对齐的浮点数组,使用movaps
加载到XMM寄存器中,这明显快于movups
。
e.g。
void foo()
{
float[4] v = [1.0f, 2.0f, 3.0f, 4.0f];
asm
{
movaps XMM0, v; // v must be 16-byte aligned for this to work.
...
}
}
答案 0 :(得分:5)
如果您愿意刻录额外的16个字节,可以在运行时自行校准。除此之外,我不知道。