1
joeHuang OP |
2
wangxn 2018-03-06 15:07:19 +08:00 via Android 1
能不能直接复制源码而不要用奇怪的伪码……
|
3
gnaggnoyil 2018-03-06 15:47:40 +08:00 1
1 中的代码的本意是认为`size * sizeof(PyObject *)`只有在不发生溢出的情况下其值才是数学意义上相乘的结果.不过我很怀疑这段代码可能不能保证 portable:一个`int`和一个`size_t`相乘的结果不保证一定是个无符号的(比如`int`的 rank 严格大于`size_t`的时候).而有符号数溢出是未定义行为.我没怎么读过 CPython 源码,如果 CPython 源码真的是这么写的话我只能说这代码质量还是有待改进……
|
4
gnaggnoyil 2018-03-06 15:51:32 +08:00 2
哦不对我傻了.我忘了有个东西叫做 Integer promotion. Integer promotion 的存在导致`int`的 rank 必然小于等于`size_t`进行 Integer promotion 之后的类型,所以两者相乘的结果必然是严格无符号的,所以这段代码应该是严格没问题的……
|
6
joeHuang OP |