mirror of
https://github.com/postgres/postgres.git
synced 2026-04-24 15:47:01 -04:00
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 <cca5507@qq.com> Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> Discussion: https://postgr.es/m/tencent_A42E0544C6184FE940CD8E3B14A3F0A39605@qq.com
This commit is contained in:
parent
bb53b8d359
commit
e5a77d876d
1 changed files with 4 additions and 6 deletions
10
src/backend/utils/cache/catcache.c
vendored
10
src/backend/utils/cache/catcache.c
vendored
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in a new issue