mirror of
https://github.com/python/cpython.git
synced 2025-07-29 14:15:07 +00:00
Patch #1953
I implemented the function sys._compact_freelists() and C API functions PyInt_/PyFloat_CompactFreeList() to compact the pre-allocated blocks of ints and floats. They allow the user to reduce the memory usage of a Python process that deals with lots of numbers. The patch also renames sys._cleartypecache to sys._clear_type_cache
This commit is contained in:
parent
a26cf9b760
commit
422051a367
11 changed files with 160 additions and 42 deletions
|
@ -754,17 +754,6 @@ a 11-tuple where the entries in the tuple are counts of:\n\
|
|||
10. Number of stack pops performed by call_function()"
|
||||
);
|
||||
|
||||
static PyObject *
|
||||
sys_cleartypecache(PyObject* self, PyObject* args)
|
||||
{
|
||||
PyType_ClearCache();
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(cleartypecache_doc,
|
||||
"_cleartypecache() -> None\n\
|
||||
Clear the internal type lookup cache.");
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
@ -783,12 +772,44 @@ extern PyObject *_Py_GetDXProfile(PyObject *, PyObject *);
|
|||
}
|
||||
#endif
|
||||
|
||||
static PyObject *
|
||||
sys_clear_type_cache(PyObject* self, PyObject* args)
|
||||
{
|
||||
PyType_ClearCache();
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(sys_clear_type_cache__doc__,
|
||||
"_clear_type_cache() -> None\n\
|
||||
Clear the internal type lookup cache.");
|
||||
|
||||
|
||||
static PyObject *
|
||||
sys_compact_freelists(PyObject* self, PyObject* args)
|
||||
{
|
||||
size_t isum, ibc, ibf;
|
||||
size_t fsum, fbc, fbf;
|
||||
|
||||
PyInt_CompactFreeList(&ibc, &ibf, &isum);
|
||||
PyFloat_CompactFreeList(&fbc, &fbf, &fsum);
|
||||
|
||||
return Py_BuildValue("(kkk)(kkk)", isum, ibc, ibf,
|
||||
fsum, fbc, fbf);
|
||||
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(sys_compact_freelists__doc__,
|
||||
"_compact_freelists() -> ((remaing_objects, total_blocks, freed_blocks), ...)\n\
|
||||
Compact the free lists of ints and floats.");
|
||||
|
||||
static PyMethodDef sys_methods[] = {
|
||||
/* Might as well keep this in alphabetic order */
|
||||
{"callstats", (PyCFunction)PyEval_GetCallStats, METH_NOARGS,
|
||||
callstats_doc},
|
||||
{"_cleartypecache", sys_cleartypecache, METH_NOARGS,
|
||||
cleartypecache_doc},
|
||||
{"_clear_type_cache", sys_clear_type_cache, METH_NOARGS,
|
||||
sys_clear_type_cache__doc__},
|
||||
{"_compact_freelists", sys_compact_freelists, METH_NOARGS,
|
||||
sys_compact_freelists__doc__},
|
||||
{"_current_frames", sys_current_frames, METH_NOARGS,
|
||||
current_frames_doc},
|
||||
{"displayhook", sys_displayhook, METH_O, displayhook_doc},
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue