Strukturą danych umożliwiającą procesowi zapamiętać jeden przydział VMA jest struktura vm_area_struct nazywana deskryptorem obszaru VMA. Procesowi można przydzielić maksymalnie 65536 bloków VMA, co jest określone przez stałą MAX_MAP_COUNT w pliku sched.h.
Wszystkie przydzielone bloki VMA proces pamięta w liście posortowanej ze względu na adresy początkowe bloków. Gdy ilość bloków VMA przekroczy 32 (wartość ta jest określona stałą AVL_MIN_MAP_COUNT), wtedy z VMA jest budowane drzewo AVL ze względu na adres początku VMA. Od tej pory, aż do zakończenia działania9, proces trzyma wszystkie swoje bloki VMA w drzewie AVL i na wspomnianej liście będącej w zasadzie infiksową fastrygą AVL'a.
Skoro jest trzymane drzewo10, to po co jeszcze trzymać listę? Otóż są przypadki gdy trzeba przejrzeć wszystkie przydzielone VMA (np. przy zwalnianiu pamięci procesu) i wtedy przejście listy będzie dużo szybsze od, zapewne rekurencyjnego, przeglądania całego drzewa AVL.
Omawiane drzewo AVL nie może przekroczyć wysokości11 równej stałej avl_maxheight = 41. Jak widać drzewo to może pomieścić dużo więcej węzłów niż ich będzie w rzeczywistości, a może ich być co najwyżej (65536) nie zależnie od platformy sprzętowej12.
Poprzez VMA jest również realizowane mapowanie plików dyskowych do pamięci. Zainteresowanych odsyłam do prezentacji poświęconej mapowaniu plików.