Message68377
Jean Brouwers wrote:
> 1) In the first line of function dict_sizeof()
> + res = sizeof(PyDictObject) + sizeof(mp->ma_table);
> is the sizeof(mp->ma_table) counted twice?
Yes, you are right. I'll fix this.
> 2) Since functions list_sizeof and dict_sizeof return the allocated
> size, including the over-allocation, should function string_sizeof not
> include the sentinel null character?
Isn't this addressed by taking PyStringObject.ob_sval into account? It
is allocated with 1 char length and thus always included. If I
understand the creation of strings correctly, the corresponding memory
is always allocated with
PyObject_MALLOC(sizeof(PyStringObject) + size)
which should mean that the space for the null terminating character is
included in the sizeof(PyStringObject).
>
>
> 3) Are tuples left out on purpose?
No, that slipped the initial patch. I corrected in r64230.
> ....
> static PyObject *
> tuple_sizeof(PyTupleObject *v)
> {
> Py_ssize_t res;
>
> res = _PyObject_SIZE(&PyTuple_Type) + Py_SIZE(v) *
> sizeof(void*);
> return PyInt_FromSsize_t(res);
> }
> ....
Your implementation is like the applied changes from me, with one
difference. The basicsize of a tuple is defined as
"sizeof(PyTupleObject) - sizeof(PyObject *)"
When a tuple's memory is allocated, the required space is computed
roughly like this
(typeobj)->tp_basicsize + (nitems)*(typeobj)->tp_itemsize
Thus, I understand the memory allocated by a tuple to be
res = PyTuple_Type.tp_basicsize + Py_SIZE(v) * sizeof(PyObject *); |
|
Date |
User |
Action |
Args |
2008-06-18 22:10:53 | schuppenies | set | spambayes_score: 0.00672415 -> 0.0067241476 recipients:
+ schuppenies, gvanrossum, loewis, georg.brandl, rhettinger, facundobatista, jcea, MrJean1 |
2008-06-18 22:10:53 | schuppenies | set | spambayes_score: 0.00672415 -> 0.00672415 messageid: <1213827052.9.0.270758511508.issue2898@psf.upfronthosting.co.za> |
2008-06-18 22:10:51 | schuppenies | link | issue2898 messages |
2008-06-18 22:10:48 | schuppenies | create | |
|