第44章 tcache

tcache は比較的最近できた機能です。

でもスレッドプログラミングと関係があるので、説明は他の本に見送りたいと思います。

ただ tcache が glibc に実装されたころには話題になった記憶はありますかね。

ま、興味のある方は下のソースでも見てください。

malloc.c(https://github.com/MacKomatsu/glibc/blob/release/2.27/master/malloc/malloc.c). 

2902 /* We overlay this structure on the user-data portion of a chunk when
2903    the chunk is stored in the per-thread cache.  */
2904 typedef struct tcache_entry
2905 {
2906   struct tcache_entry *next;
2907 } tcache_entry;
2908
2909 /* There is one of these for each thread, which contains the
2910    per-thread cache (hence "tcache_perthread_struct").  Keeping
2911    overall size low is mildly important.  Note that COUNTS and ENTRIES
2912    are redundant (we could have just counted the linked list each
2913    time), this is for performance reasons.  */
2914 typedef struct tcache_perthread_struct
2915 {
2916   char counts[TCACHE_MAX_BINS];
2917   tcache_entry *entries[TCACHE_MAX_BINS];
2918 } tcache_perthread_struct;
2919
2920 static __thread bool tcache_shutting_down = false;
2921 static __thread tcache_perthread_struct *tcache = NULL;

ソースは分かりやすいように切り貼りしていますが、かなりシンプルなデータ構造なのは分かるかと思います。

Copyright 2018-2019, by Masaki Komatsu