mirror of https://github.com/python/cpython
bpo-40521: Remove freelist from collections.deque() (GH-21073)
This commit is contained in:
parent
1d3dad5f96
commit
32f2eda859
|
@ -0,0 +1 @@
|
|||
Remove freelist from collections.deque().
|
|
@ -117,23 +117,9 @@ static PyTypeObject deque_type;
|
|||
#define CHECK_NOT_END(link)
|
||||
#endif
|
||||
|
||||
/* A simple freelisting scheme is used to minimize calls to the memory
|
||||
allocator. It accommodates common use cases where new blocks are being
|
||||
added at about the same rate as old blocks are being freed.
|
||||
*/
|
||||
|
||||
#define MAXFREEBLOCKS 16
|
||||
static Py_ssize_t numfreeblocks = 0;
|
||||
static block *freeblocks[MAXFREEBLOCKS];
|
||||
|
||||
static block *
|
||||
newblock(void) {
|
||||
block *b;
|
||||
if (numfreeblocks) {
|
||||
numfreeblocks--;
|
||||
return freeblocks[numfreeblocks];
|
||||
}
|
||||
b = PyMem_Malloc(sizeof(block));
|
||||
block *b = PyMem_Malloc(sizeof(block));
|
||||
if (b != NULL) {
|
||||
return b;
|
||||
}
|
||||
|
@ -144,12 +130,7 @@ newblock(void) {
|
|||
static void
|
||||
freeblock(block *b)
|
||||
{
|
||||
if (numfreeblocks < MAXFREEBLOCKS) {
|
||||
freeblocks[numfreeblocks] = b;
|
||||
numfreeblocks++;
|
||||
} else {
|
||||
PyMem_Free(b);
|
||||
}
|
||||
PyMem_Free(b);
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
|
|
Loading…
Reference in New Issue