我有一个场景

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


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

最佳答案

执行块时:

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时,请不要使用像length这样的硬编码数字。采用:

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

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

10-11 15:38
查看更多