c++ - SSE-C++ 内存溢出

标签 c++ sse

我有一个场景

     int N3 =7000
    temp =(int*)malloc(sizeof(int )*N3);

    for(unsigned int i=0;i<N3;i++)
    {
              temp[i]=i;
    }



    temp = temp +10;
    __m128i* array= reinterpret_cast<__m128i*>(temp);
   int length = N3/4;

   for(unsigned int i=0;i<length;i++)
   {
      __m128i answer= _mm_loadu_si128(&array[i]);
   }

我认为这里发生了内存溢出。我们如何避免这个错误。

最佳答案

当你执行 block 时:

temp = temp +10;
__m128i* sse_array = reinterpret_cast<__m128i*>(temp);
int length = N3/4;

for(unsigned int i=0;i<length;i++)
{
   __m128i result = _mm_loadu_si128(&sse_array[i]);
}

您将 temp+10 视为 temp。当 for 循环结束时,您正在访问的内存超过了您通过 10*sizeof(int) 内存位置分配的内存。

附言

计算长度时,不要使用硬编码数字,如4。使用:

int length = N3*sizeof(int)/size(__m128i);

关于c++ - SSE-C++ 内存溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26189976/

相关文章:

用于实时音频合成的 C++ 精确 44100Hz 时钟

c++ - 有文件名并删除它们

c++ - 使用 SIMD 指令执行任意 128/256/512 位排列的最快方法是什么?

c++ - 对齐的成员变量和动态分配

c++ - 从属于同一类的对象内部访问类变量

c++ - Qt 5.1.1 和 OpenGL - 渲染速度

c++ - 检查 XMM 寄存器是否全为零

c++ - 比较两个 vector<bool> 与 SSE

c++ - SSE,行主要与列主要性能问题

c++ - 升级NC30 M16 C编译器: va_arg issue