The arena serves two purposes. It is a structure that is the top-level state of the MPS, and as such contains a lot of fields which are considered "global". And it provides raw memory to pools. An arena belongs to a particular arena class. The class is selected when the arena is created. Classes encapsulate both policy (such as how pool placement preferences map into actual placement) and mechanism (such as where the memory originates: operating system virtual memory, client provided, or via malloc). Some behaviour (mostly serving the "top-level datastructure" purpose) is implemented by generic arena code, and some by arena class code.