第48章 malloc.c の内部関数

malloc.c の内部関数で一番 malloc() のイメージにふさわしい仕事をするのが sysmalloc() 関数です。

2265 /*
2266    sysmalloc handles malloc cases requiring more memory from the system.
2267    On entry, it is assumed that av->top does not have enough
2268    space to service request for nb bytes, thus requiring that av->top
2269    be extended or replaced.
2270  */
2271
2272 static void *
2273 sysmalloc (INTERNAL_SIZE_T nb, mstate av)

この関数は新規の割り当てに使われます。

もう一つ頻繁に使われるのが alloc_perturb() 関数です。

1882 static int perturb_byte;
1883
1884 static void
1885 alloc_perturb (char *p, size_t n)
1886 {
1887   if (__glibc_unlikely (perturb_byte))
1888     memset (p, perturb_byte ^ 0xff, n);
1889 }
1890
1891 static void
1892 free_perturb (char *p, size_t n)
1893 {
1894   if (__glibc_unlikely (perturb_byte))
1895     memset (p, perturb_byte, n);
1896 }

perturb_byte が 0 でないならポインター p が指す n バイトに対して perturb_byte ^ 0xff を設定します。

Copyright 2018-2019, by Masaki Komatsu