Py_ssize_t
is signed. See PEP 353, where it says "A new type Py_ssize_t is introduced, which has the same size as the compiler's size_t type, but is signed. It will be a typedef for ssize_t where available."
You should use Py_ssize_t
for indexing. I didn't find a definitive statement of this in the Cython docs, but Stefan Behnel, a Cython developer, said as much in an email (https://groups.google.com/forum/#!topic/cython-users/brENF_M9zxM):
As a general remark, you are using ints as indices. You should
use the Py_ssize_t type instead (or size_t, if you prefer an
unsigned type) to properly accommodate for 64 bit architectures.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…