我有一个场景
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/