我对SLMATH library有疑问。不确定是否有人使用过它或之前使用过它?无论如何,问题是当我在启用SSE优化的情况下进行编译时(在VS 2010中),我显然必须为SSE类型对象提供一个具有正确字节对齐的容器。这没关系,因为SLMATH中有一个小类,它是一个对齐的向量;它将向量分配与8字节边界对齐(即我不使用std :: vector<>)。
现在的问题是,在将它放入集合之前,任何包含像slm :: mat4这样的东西的结构或类也必须在这样的边界上对齐。所以,例如,我使用一个对齐的向量来创建一个slm :: mat4数组,但如果我创建一个名为Mesh的类,并且Mesh包含一个slm :: mat4,我想将Mesh放入一个std :: vector中,好吧,我在调试时遇到奇怪的内存错误。
因此,鉴于文档确实非常稀疏,任何使用此库的人都可以告诉我,我必须做些什么才能将它与SSE优化一起使用?我的意思是我不喜欢必须使用对齐的向量来代替std :: vector,以防slm :: component最终以某种方式封装到类或结构中。
或者,快速矢量/矩阵/图形数学库与SLMATH一样好,如果有的话就会很好。
感谢您提供任何建议。
编辑1:不使用SLMATH的简单repro-case说明了问题:
#include <vector>
class Item
{
public:
__declspec(align(8))
struct {
float a, b, c, d;
} Aligned;
};
int main()
{
// Error - won't compile.
std::vector<Item> myItems;
}
罗宾
答案 0 :(得分:1)
如果您声明变量在变量声明中使用__declspec(align)
,或者将它们包装在声明自身正确对齐的结构中,那么它可能会有效。我没有使用过这个库,但似乎这可能是你面临的问题。
可以找到对齐选项的引用here。