如果在装有 Visual Studio 的 PC(运行 Windows 7 的 cpu Intel i7)或我的 Android 手机 (P880) 上执行以下函数(从 .cpp 文件中提取),则会给出两种不同的结果(即输出缓冲区int_image
不同)。两个输入缓冲区im1
和im2
,类型int8
( 的同义词char
)完全相同(已检查),以及参数w
和h
。我不明白为什么会这样:
void Compute(int8* im1,
int8* im2,
int w,
int h,
int* int_image)
{
int index = 0;
int sum;
for(int i = 0; i<h; i++)
{
// reset this column sum
sum = 0;
for(int j = 0; j<w; j++)
{
int pn;
int8 v1, v2;
v1 = im1[index];
v2 = im2[index];
pn = v1*v2;
//pn = ((int)im1[index]) * ((int)im2[index]);
sum += pn;
if (i==0)
int_image[index] = sum;
else
int_image[index] = int_image[index - w] + sum;
index++;
}
}
}
笔记。char 图像 im1 和 im2 的大小可能会发生整数溢出(但我认为这种情况由两个编译器平等处理,但在这一点上我不太确定)。