求高人指点

cfadongdongcfa 2010-10-22 10:55:48
PY2.4的Pylist_New函数中对内存检查
nbytes = size * sizeof(PyObject *);
/* Check for overflow without an actual overflow,
* which can cause compiler to optimise out */
if (nbytes / sizeof(PyObject *) !=(size_t)size)
return PyErr_NoMemory();
size为函数传入参数int size

PY2.6的Pylist_New的内存检查
nbytes = size * sizeof(PyObject *);
/* Check for overflow without an actual overflow,
* which can cause compiler to optimise out */
if (size > PY_SIZE_MAX / sizeof(PyObject *))
return PyErr_NoMemory();

其中PY_SIZE_MAX定义为
#ifdef SIZE_MAX
#define PY_SIZE_MAX SIZE_MAX
#else
#define PY_SIZE_MAX ((size_t)-1)
#endif

红色部分让我这个以前自认为C语言达到教师级别的人有点看不明白,有这个必要么?看来我还是只小菜鸟啊。。。
...全文
120 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cfadongdongcfa 2010-10-22
  • 打赏
  • 举报
回复
从注释来看,是防止内存溢出。

2.6的代码或许是因为判断这个size是否过于大,比如超过了(MAX UINT)/4的值,但为什么2.6的修改了2.4的。。。

有高人给个说法不?
两个判断在我看来没什么区别,此外,这个判断的必要性我也有点怀疑。

ouyh12345 2010-10-22
  • 打赏
  • 举报
回复
可能是实现的机制不同
有些代码看起来很没必要,但可能是接触少的原因
当然,作者给出一些范例就更好了
cfadongdongcfa 2010-10-22
  • 打赏
  • 举报
回复
3#的哥啊。。麻烦您仔细看一下代码。。。
ouyh12345 2010-10-22
  • 打赏
  • 举报
回复
怎么了,不就判断数组个数吗?
manytao 2010-10-22
  • 打赏
  • 举报
回复
我不会 不会 ..
大石头1987 2010-10-22
  • 打赏
  • 举报
回复
红色部分让我这个以前自认为C语言达到教师级别的人有点看不明白
这句话很经典啊!!

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧