Memory Pools
00:00 Pools are composed of blocks from a single size class. These tall blue rectangles are each a pool. Each pool maintains a doubly-linked list to other pools of the same class size.
00:14
This allows the algorithm to easily find available space for a given block size, even across multiple different pools of the same size class. A usedpools
list tracks the status of each pool that is neither full or empty of blocks. When a given block size is requested, the algorithm checks this usedpools
list for the list of pools for the block size needed. Pools themselves may be in one of three states: used
, full
, or empty
.
00:46
A used
pool has available blocks for data to be stored. A full
pool’s blocks are all allocated and contain data. An empty
pool has no data stored and can be assigned any size class for blocks when needed. Similar to usedpools
, a freepools
list keeps track of all the pools in the empty
state, but when do empty pools actually get used? Well, assume your code needs an 8-byte chunk of memory.
01:17
If there are no pools in usedpools
of the 8-byte size class, a fresh empty
pool is initialized to store 8-byte blocks. This new pool then gets added to the usedpools
list so it can be used for future requests.
01:32
Say a full
pool frees some of its blocks because the memory is no longer needed. That pool would get added back to the usedpools
list for its size class.
01:44 The key takeaway is this: pools are containers for blocks of memory, and each one stores a certain size block. Pools of the same size class are linked so they are easily accessible together.
01:57
Python keeps track of these pools by storing them in lists, notably freepools
and usedpools
, which tell it where to look for these different pools.
Become a Member to join the conversation.