https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114563
--- Comment #12 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to andi from comment #8)
> > > Needs a workload where it matters
> >
> > PR119387 had
> >
> > 85.81% 1500713 cc1plus cc1plus [.]
> > ggc_internal_alloc(un
> >
> > for me. Can we keep an index to freelist from allocation order to avoid
> > the linear search?
>
> Yes for the alloc
>
> > Other than that the patch looks simple than I thought,
> > and it definitely resolves an algorithmic complexity issue, so even without
> > a clear workload where it matters it should be OK (during stage1, that is).
>
> The main drawback is that the madvise patterns to the OS are worse
> because it will do it in smaller chunks. That was the reason I had
> second thoughts later.
Btw, for this, sth I also wondered before, we'd likely want to change
alloc_page when it does
#ifdef USING_MMAP
else if (entry_size == G.pagesize)
{
/* We want just one page. Allocate a bunch of them and put the
extras on the freelist. (Can only do this optimization with
mmap for backing store.) */
struct page_entry *e, *f = free_list->free_pages;
int i, entries = GGC_QUIRE_SIZE;
to do this for entry_size < G.pagesize * GGC_QUIRE_SIZE, this should
avoid fragmenting the virtual address space. Possibly do this only
for USING_MADVISE, not sure.