On Wed, 3 Aug 2022 at 14:40, Zhihong Yu <z...@yugabyte.com> wrote: > For array_agg_combine(): > > + if (state1->alen < reqsize) > + { > + /* Use a power of 2 size rather than allocating just reqsize */ > + state1->alen = pg_nextpower2_32(reqsize); > ... > + state1->nelems = reqsize; > > I wonder why pg_nextpower2_32(reqsize) is used in the if block. It seems > reqsize should suffice.
It would suffice, but it's a question of trying to minimise the reallocations. There might be many parallel workers to combine results from. Nothing says this one is the last call to combine the given aggregate state. As far as aset.c allocations, for small / medium allocations, the actual memory is allocated in powers of 2 anyway. If you request less, you'll maybe need to repalloc more often, needlessly. The actual underlying allocation might be big enough already, it's just that the palloc() caller does not have knowledge of that. David