diff --git a/_drafts/python-object-replacement.md b/_drafts/python-object-replacement.md index 81688c7..aad63da 100644 --- a/_drafts/python-object-replacement.md +++ b/_drafts/python-object-replacement.md @@ -762,12 +762,12 @@ to create a reference to the replacement object, `b`, which will be copied over the existing reference to `a`. Finally, `field_size` is the number of bytes we're copying, equal to the size of the `im_self` field. -Well, all but one of these fields are pointers, meaning they have the same -size, equal to -[`ctypes.sizeof(ctypes.c_void_p)`](https://docs.python.org/2/library/ctypes.html#ctypes.sizeof). +Well, all but one of these fields are pointers to structure types, meaning they +have the same size,[5] equal to +[`ctypes.sizeof(ctypes.py_object)`](https://docs.python.org/2/library/ctypes.html#ctypes.sizeof). This is (probably) 4 or 8 bytes, depending on whether you're on a 32-bit or a -64-bit system. The other field is a `Py_ssize_t` object—_very_ likely to be -the same size as a pointer, but we can't be sure—which is equal to +64-bit system. The other field is a `Py_ssize_t` object—possibly the same size +as the pointers, but we can't be sure—which is equal to `ctypes.sizeof(ctypes.c_ssize_t)`. [`PyCFunctionObject`](https://github.com/python/cpython/blob/2.7/Include/methodobject.h#L81) @@ -833,3 +833,10 @@ is left as an exercise for the reader. 4. ^ Python's documentation tells us not to modify the locals dictionary, but screw that; we're gonna do it anyway. + +5. ^ According to the + [C99](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf) and + [C11 standards](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf); + section 6.2.5.27 in the former and 6.2.5.28 in the latter: "All pointers to + structure types shall have the same representation and alignment + requirements as each other."