2012-07-27 83 views
9

這個簡單的SSE代碼:on MSVC 10矢量不會的push_back()

#include <vector> 
#include <emmintrin.h> 

int main() { 
    std::vector<__m128> blah; 
    blah.push_back(__m128()); 
} 

崩潰與0xffffffff段錯誤。

可能會出現什麼問題?

+0

對齊將是問題。問題是:如何修復以及如何修復 – sehe 2012-07-27 00:03:26

+0

在數據類型中添加__declspec(align(16))不起作用。此外,'__m128'似乎本地對齊:http://msdn.microsoft.com/en-us/library/ayeb3ayc.aspx – slaphappy 2012-07-27 00:09:53

+1

該類型的變量。沒有將對象放入堆內存中。 – Puppy 2012-07-27 00:24:36

回答

13

A std::vector不分配專門對齊的內存,其中__m128需要存儲它的數據。您將不得不換出分配器,或者將其替換爲4個浮點數組,然後每次訪問矢量時執行未對齊的加載或複製到對齊的位置。