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