正在对齐SSE的模板矢量结构

Aligning template vector struct for SSE

本文关键字:结构 对齐 SSE      更新时间:2023-10-16

我正在使用MSVC++Express 2010 for windows编写一个软件光栅器。我正在使用SSE,需要对齐的数据结构。对于不同的基本数据类型(float、int等),我有许多单独的向量结构,为了方便起见,我想将它们滚动到一个模板结构中。_declspec(align(16))标记在对齐结构方面起到了很好的作用,但它似乎不适用于模板。我有什么选择?这就是我想要实现的目标:

/* _declspec(align(16)) */
template< typename T > struct baseVector 
{
    T   v[ 4 ];
};
typedef baseVector< float > vector, vertex, point;  // etc

我尝试过专门化模板并使用_declspec(align()),但编译器抱怨道。我也尝试过使用#pragma-pack(),但我认为当这些结构是更高级别结构的成员时,这不会产生任何对齐效果。

declspec位于错误的位置。它应该在struct之后。

template<typename T> 
struct _declspec(align(16)) baseVector 
{
    T v[4];
};