[PATCH 4/9] malloc: remove mallopt fastbin stats
DJ Delorie
dj@redhat.com
Wed Nov 12 20:26:16 GMT 2025
Dev Jain <dev.jain@arm.com> writes:
> In preparation for removal of fastbins, remove all fastbin code from
> mallopt.
> diff --git a/malloc/malloc.c b/malloc/malloc.c
> index d78abe64fe..a1066cbc94 100644
> --- a/malloc/malloc.c
> +++ b/malloc/malloc.c
> @@ -659,12 +659,9 @@ void* __libc_valloc(size_t);
>
> arena: current total non-mmapped bytes allocated from system
> ordblks: the number of free chunks
> - smblks: the number of fastbin blocks (i.e., small chunks that
> - have been freed but not reused or consolidated)
> hblks: current number of mmapped regions
> hblkhd: total bytes held in mmapped regions
> usmblks: always 0
> - fsmblks: total bytes held in fastbin blocks
> uordblks: current total allocated space (normal or mmapped)
> fordblks: total free space
> keepcost: the maximum number of bytes that could ideally be released
Ok.
> @@ -5017,9 +5014,7 @@ int_mallinfo (mstate av, struct mallinfo2 *m)
> mbinptr b;
> mchunkptr p;
> INTERNAL_SIZE_T avail;
> - INTERNAL_SIZE_T fastavail;
> int nblocks;
> - int nfastblocks;
Ok.
> avail = chunksize (av->top);
> nblocks = 1; /* top always exists */
>
> - /* traverse fastbins */
> - nfastblocks = 0;
> - fastavail = 0;
> -
> - for (i = 0; i < NFASTBINS; ++i)
> - {
> - for (p = fastbin (av, i);
> - p != NULL;
> - p = REVEAL_PTR (p->fd))
> - {
> - if (__glibc_unlikely (misaligned_chunk (p)))
> - malloc_printerr ("int_mallinfo(): "
> - "unaligned fastbin chunk detected");
> - ++nfastblocks;
> - fastavail += chunksize (p);
> - }
> - }
> -
> - avail += fastavail;
> -
Ok.
> }
>
> - m->smblks += nfastblocks;
> m->ordblks += nblocks;
> m->fordblks += avail;
> m->uordblks += av->system_mem - avail;
> m->arena += av->system_mem;
> - m->fsmblks += fastavail;
> if (av == &main_arena)
Ok.
>
> m.arena = m2.arena;
> m.ordblks = m2.ordblks;
> - m.smblks = m2.smblks;
> m.hblks = m2.hblks;
> m.hblkhd = m2.hblkhd;
> m.usmblks = m2.usmblks;
> - m.fsmblks = m2.fsmblks;
> m.uordblks = m2.uordblks;
> m.fordblks = m2.fordblks;
> m.keepcost = m2.keepcost;
No, see below.
> diff --git a/malloc/malloc.h b/malloc/malloc.h
> index 6de9ee8a7a..042a56c567 100644
> --- a/malloc/malloc.h
> +++ b/malloc/malloc.h
> @@ -83,11 +83,9 @@ struct mallinfo
> {
> int arena; /* non-mmapped space allocated from system */
> int ordblks; /* number of free chunks */
> - int smblks; /* number of fastbin blocks */
> int hblks; /* number of mmapped regions */
> int hblkhd; /* space in mmapped regions */
> int usmblks; /* always 0, preserved for backwards compatibility */
> - int fsmblks; /* space available in freed fastbin blocks */
> int uordblks; /* total allocated space */
> int fordblks; /* total free space */
> int keepcost; /* top-most, releasable (via malloc_trim) space */
> @@ -100,11 +98,9 @@ struct mallinfo2
> {
> size_t arena; /* non-mmapped space allocated from system */
> size_t ordblks; /* number of free chunks */
> - size_t smblks; /* number of fastbin blocks */
> size_t hblks; /* number of mmapped regions */
> size_t hblkhd; /* space in mmapped regions */
> size_t usmblks; /* always 0, preserved for backwards compatibility */
> - size_t fsmblks; /* space available in freed fastbin blocks */
> size_t uordblks; /* total allocated space */
> size_t fordblks; /* total free space */
> size_t keepcost; /* top-most, releasable (via malloc_trim) space */
You can't do this, because it breaks backwards compatibility. The best
you can do is leave the fields present but fill them with zeros.
> diff --git a/malloc/tst-mallinfo2.c b/malloc/tst-mallinfo2.c
> index 28ff6e2346..01b9e25ce4 100644
> --- a/malloc/tst-mallinfo2.c
> +++ b/malloc/tst-mallinfo2.c
> @@ -35,11 +35,9 @@ print_mi (const char *msg, struct mallinfo2 *m)
> #define P(f) printf("%s: %zu\n", #f, m->f)
> P(arena);
> P(ordblks);
> - P(smblks);
> P(hblks);
> P(hblkhd);
> P(usmblks);
> - P(fsmblks);
> P(uordblks);
> P(fordblks);
> P(keepcost);
I could go either way on this; the fields will always be zero, but the
test can prove that they're always zero.
More information about the Libc-alpha
mailing list