内存溢出SSE-C ++

时间:2014-10-04 05:29:27

标签: 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]);
   }

我认为这里会发生内存溢出。我们如何才能避免这种错误。

1 个答案:

答案 0 :(得分:1)

执行块时:

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)内存位置分配的内存。

<强> PS

在计算4时,请勿使用硬编码的数字,例如length。使用:

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