`
Aoogoo
  • 浏览: 20789 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Postgresql源码中的加法函数:Size add_size(Size s1, Size s2)

阅读更多
看到这个函数真是佩服他们的谨慎。一个简单的加法函数,居然写成这样。
/*
 * Add two Size values, checking for overflow
 */
Size
add_size(Size s1, Size s2)
{
	Size		result;

	result = s1 + s2;
	/* We are assuming Size is an unsigned type here... */
	if (result < s1 || result < s2)
		ereport(ERROR,
				(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
				 errmsg("requested shared memory size overflows size_t")));
	return result;
}

还考虑了溢出,真够谨慎的。
下面是乘法函数
/*
 * Multiply two Size values, checking for overflow
 */
Size
mul_size(Size s1, Size s2)
{
	Size		result;

	if (s1 == 0 || s2 == 0)
		return 0;
	result = s1 * s2;
	/* We are assuming Size is an unsigned type here... */
	if (result / s2 != s1)
		ereport(ERROR,
				(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
				 errmsg("requested shared memory size overflows size_t")));
	return result;
}

1
0
分享到:
评论
2 楼 Aoogoo 2010-04-29  
还希望boyhailong能具体指出哪里有问题?
1 楼 boyhailong 2010-04-28  
那个加法的算法是不是有点问题啊?

相关推荐

Global site tag (gtag.js) - Google Analytics