【发布时间】:2012-03-02 13:29:32
【问题描述】:
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:: 组件最终以某种方式被封装到一个类或结构中。
或者,如果有一个和 SLMATH 一样好的快速矢量/矩阵/图形数学库,那就太好了。
感谢您提供的任何建议。
编辑 1:不使用 SLMATH 的简单复制案例说明了问题:
#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;
}
罗宾
【问题讨论】: