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