4

我正在尝试将 SSE 类型存储在 stl 容器中。我试过这个:

#include <iostream>
#include <vector>

int main()
{
  typedef int v4sf __attribute__ (( vector_size(4*sizeof(float)) ));

  v4sf a; // compiles

  std::vector<v4sf> v1; // compiles, but nothing is actually allocated

//  std::vector<v4sf> v2(10); // compiler error: can’t convert between vector values of different size

  std::vector<v4sf> v(10, a); // Compiles, but segfaults

  return 0;
}

但如前所述,在不提供要复制的对象的情况下进行分配会产生编译器错误,而在提供对象的情况下进行分配会编译但会出现段错误。谁能解释为什么我不能将这些 SSE 对象存储在这样的 STL 容器中(或者更好的是,提供正确的方法)?

4

1 回答 1

2

要使其正常工作,您必须实现自定义分配器。要使用它,它是类型旁边的参数: std::vector< SSEType, CustomAlloc> 容器;其中 CustomAlloc 是分配器。您必须使用 alligned_malloc 或 memalign 在分配器中获取内存,但这是成功的方法。

可以在此处找到此类(不太容易实现)的示例: 实现分配器示例

我已经对 SSE 做了很多,我观察到,这是使用对齐 malloc 并将其用于我的计算的最简单方法。

于 2012-09-07T21:11:56.723 回答