Skip to content

Commit

Permalink
Revert "bpo-40521: Remove freelist from collections.deque() (GH-21073)…
Browse files Browse the repository at this point in the history
…" (GH-24944)

This reverts commit 32f2eda.
It can be re-applied if the subinterpreter PEP is approved.
Otherwise, the commit degraded performance with no offsetting
benefit.
  • Loading branch information
rhettinger committed Mar 25, 2021
1 parent 929c903 commit 3bb1987
Showing 1 changed file with 21 additions and 2 deletions.
23 changes: 21 additions & 2 deletions Modules/_collectionsmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -118,9 +118,23 @@ 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 = PyMem_Malloc(sizeof(block));
block *b;
if (numfreeblocks) {
numfreeblocks--;
return freeblocks[numfreeblocks];
}
b = PyMem_Malloc(sizeof(block));
if (b != NULL) {
return b;
}
Expand All @@ -131,7 +145,12 @@ newblock(void) {
static void
freeblock(block *b)
{
PyMem_Free(b);
if (numfreeblocks < MAXFREEBLOCKS) {
freeblocks[numfreeblocks] = b;
numfreeblocks++;
} else {
PyMem_Free(b);
}
}

static PyObject *
Expand Down

0 comments on commit 3bb1987

Please sign in to comment.