在D中对齐堆栈变量

Pet*_*der 10 stack d alignment

在D中,您可以使用align关键字对齐struct/class成员,例如:

struct Vec4 { align(16) float[4] elems; }
Run Code Online (Sandbox Code Playgroud)

但是,看起来你不能在堆栈上做同样的事情:

void foo()
{
    align(16) float[4] vec; // error: found 'align' instead of statement
}
Run Code Online (Sandbox Code Playgroud)

有没有办法对齐堆栈上的数据?特别是,我想创建一个16字节对齐的浮点数组,以便加载到XMM寄存器中movaps,这比使用快得多movups.

例如

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.
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

BCS*_*BCS 5

如果你愿意刻录额外的16个字节,你可以在运行时对齐你自己.除此之外,我不知道.