Linux の kernel では同じようなデータ構造を頻繁に割り当てしては廃棄しています。
あまり頻繁にやりすぎるとフラグメンテーションという、使えるメモリー領域がどんどん減ってしまう現象が起きるので実に困ったもんです。
そこでメモリーページのキャッシュをすることになります。
一番簡単なキャッシングであれば、フリーリストと呼ばれるキャッシュコンテナを各データ構造ごとに別々に用意する方法があります。
新しいオブジェクトは未使用のスロットにキャッシュして使用フラグを設定し、不要なオブジェクトを保持するスロットには未使用フラグに設定します。
まあ考え方はいたって単純です。
はい…
(´・ω・`)
それで実際のところは Linux カーネルではもう少し複雑なキャッシングを行います。
それがスラブレイヤー( slab layer )またはスラブアロケーター( slab allocator )です。
Copyright 2018-2019, by Masaki Komatsu