mirror of
https://github.com/python/cpython.git
synced 2025-10-17 20:28:43 +00:00
Issue #21233: Add new C functions: PyMem_RawCalloc(), PyMem_Calloc(),
PyObject_Calloc(), _PyObject_GC_Calloc(). bytes(int) and bytearray(int) are now using ``calloc()`` instead of ``malloc()`` for large objects which is faster and use less memory (until the bytearray buffer is filled with data).
This commit is contained in:
parent
d50c3f3f3a
commit
db067af12a
11 changed files with 366 additions and 71 deletions
|
@ -1703,15 +1703,19 @@ PyObject_GC_UnTrack(void *op)
|
|||
_PyObject_GC_UNTRACK(op);
|
||||
}
|
||||
|
||||
PyObject *
|
||||
_PyObject_GC_Malloc(size_t basicsize)
|
||||
static PyObject *
|
||||
_PyObject_GC_Alloc(int use_calloc, size_t basicsize)
|
||||
{
|
||||
PyObject *op;
|
||||
PyGC_Head *g;
|
||||
size_t size;
|
||||
if (basicsize > PY_SSIZE_T_MAX - sizeof(PyGC_Head))
|
||||
return PyErr_NoMemory();
|
||||
g = (PyGC_Head *)PyObject_MALLOC(
|
||||
sizeof(PyGC_Head) + basicsize);
|
||||
size = sizeof(PyGC_Head) + basicsize;
|
||||
if (use_calloc)
|
||||
g = (PyGC_Head *)PyObject_Calloc(1, size);
|
||||
else
|
||||
g = (PyGC_Head *)PyObject_Malloc(size);
|
||||
if (g == NULL)
|
||||
return PyErr_NoMemory();
|
||||
g->gc.gc_refs = 0;
|
||||
|
@ -1730,6 +1734,18 @@ _PyObject_GC_Malloc(size_t basicsize)
|
|||
return op;
|
||||
}
|
||||
|
||||
PyObject *
|
||||
_PyObject_GC_Malloc(size_t basicsize)
|
||||
{
|
||||
return _PyObject_GC_Alloc(0, basicsize);
|
||||
}
|
||||
|
||||
PyObject *
|
||||
_PyObject_GC_Calloc(size_t basicsize)
|
||||
{
|
||||
return _PyObject_GC_Alloc(1, basicsize);
|
||||
}
|
||||
|
||||
PyObject *
|
||||
_PyObject_GC_New(PyTypeObject *tp)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue