相关疑难解决方法(0)

堆栈变量是否由GCC __attribute __((aligned(x)))对齐?

我有以下代码:

#include <stdio.h>

int
main(void)
{
        float a[4] __attribute__((aligned(0x1000))) = {1.0, 2.0, 3.0, 4.0};
        printf("%p %p %p %p\n", &a[0], &a[1], &a[2], &a[3]);
}
Run Code Online (Sandbox Code Playgroud)

我有以下输出:

0x7fffbfcd2da0 0x7fffbfcd2da4 0x7fffbfcd2da8 0x7fffbfcd2dac
Run Code Online (Sandbox Code Playgroud)

为什么地址a[0]不是多个0x1000

到底__attribute__((aligned(x)))是什么?我误解了这个解释?

我正在使用gcc 4.1.2.

c gcc callstack memory-alignment

86
推荐指数
4
解决办法
8万
查看次数

在x86上做水平浮点矢量和的最快方法

你有一个三(或四)个浮点数的向量.总结它们的最快方法是什么?

SSE(movaps,shuffle,add,movd)总是比x87快吗?SSE4.2中的水平加法说明值得吗?移动到FPU的成本是多少,然后是faddp,faddp?什么是最快的特定指令序列?

"尝试安排事情,这样你可以一次总结四个向量"将不被接受作为答案.:-)

floating-point optimization x86 assembly sse

41
推荐指数
4
解决办法
2万
查看次数