From: Tom Lane Date: Sun, 15 Mar 2026 22:05:38 +0000 (-0400) Subject: Save a few bytes per CatCTup. X-Git-Tag: REL_19_BETA1~826 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e5a77d876dbb6168e3013d32198794c535f1627d;p=thirdparty%2Fpostgresql.git Save a few bytes per CatCTup. CatalogCacheCreateEntry() computed the space needed for a CatCTup as sizeof(CatCTup) + MAXIMUM_ALIGNOF. That's not our usual style, and it wastes memory by allocating more padding than necessary. On 64-bit machines sizeof(CatCTup) would be maxaligned already since it contains pointer fields, therefore this code is wasting 8 bytes compared to the more usual MAXALIGN(sizeof(CatCTup)). While at it, we don't really need to do MemoryContextSwitchTo() when we're only allocating one block. Author: ChangAo Chen Reviewed-by: Tom Lane Discussion: https://postgr.es/m/tencent_A42E0544C6184FE940CD8E3B14A3F0A39605@qq.com --- diff --git a/src/backend/utils/cache/catcache.c b/src/backend/utils/cache/catcache.c index 519089322f4..87ed5506460 100644 --- a/src/backend/utils/cache/catcache.c +++ b/src/backend/utils/cache/catcache.c @@ -2221,20 +2221,18 @@ CatalogCacheCreateEntry(CatCache *cache, HeapTuple ntp, Datum *arguments, dtp = ntp; /* Allocate memory for CatCTup and the cached tuple in one go */ - oldcxt = MemoryContextSwitchTo(CacheMemoryContext); - - ct = (CatCTup *) palloc(sizeof(CatCTup) + - MAXIMUM_ALIGNOF + dtp->t_len); + ct = (CatCTup *) + MemoryContextAlloc(CacheMemoryContext, + MAXALIGN(sizeof(CatCTup)) + dtp->t_len); ct->tuple.t_len = dtp->t_len; ct->tuple.t_self = dtp->t_self; ct->tuple.t_tableOid = dtp->t_tableOid; ct->tuple.t_data = (HeapTupleHeader) - MAXALIGN(((char *) ct) + sizeof(CatCTup)); + (((char *) ct) + MAXALIGN(sizeof(CatCTup))); /* copy tuple contents */ memcpy((char *) ct->tuple.t_data, (const char *) dtp->t_data, dtp->t_len); - MemoryContextSwitchTo(oldcxt); if (dtp != ntp) heap_freetuple(dtp);