SSE-C++内存溢出

Memory overflow with SSE-C++

本文关键字:溢出 内存 SSE-C++      更新时间:2023-10-16

我有一个场景

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

PS

在计算length时,不要使用硬编码数字,如4。用途:

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