postgresql/src/include/utils
David Rowley 743112a2e9 Adjust memory allocation functions to allow sibling calls
Many modern compilers are able to optimize function calls to functions
where the parameters of the called function match a leading subset of
the calling function's parameters.  If there are no instructions in the
calling function after the function is called, then the compiler is free
to avoid any stack frame setup and implement the function call as a
"jmp" rather than a "call".  This is called sibling call optimization.

Here we adjust the memory allocation functions in mcxt.c to allow this
optimization.  This requires moving some responsibility into the memory
context implementations themselves.  It's now the responsibility of the
MemoryContext to check for malloc failures.  This is good as it both
allows the sibling call optimization, but also because most small and
medium allocations won't call malloc and just allocate memory to an
existing block.  That can't fail, so checking for NULLs in that case
isn't required.

Also, traditionally it's been the responsibility of palloc and the other
allocation functions in mcxt.c to check for invalid allocation size
requests.  Here we also move the responsibility of checking that into the
MemoryContext.  This isn't to allow the sibling call optimization, but
more because most of our allocators handle large allocations separately
and we can just add the size check when doing large allocations.  We no
longer check this for non-large allocations at all.

To make checking the allocation request sizes and ERROR handling easier,
add some helper functions to mcxt.c for the allocators to use.

Author: Andres Freund
Reviewed-by: David Rowley
Discussion: https://postgr.es/m/20210719195950.gavgs6ujzmjfaiig@alap3.anarazel.de
2024-02-27 16:39:42 +13:00
..
.gitignore Generate automatically code and documentation related to wait events 2023-07-05 10:53:11 +09:00
acl.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
aclchk_internal.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
array.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
arrayaccess.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
ascii.h Move is_valid_ascii() to ascii.h. 2024-01-29 12:08:57 -06:00
attoptcache.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
backend_progress.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
backend_status.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
builtins.h Adjust populate_record_field() to handle errors softly 2024-01-24 15:04:33 +09:00
bytea.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
cash.h Convert *GetDatum() and DatumGet*() macros to inline functions 2022-09-27 20:50:21 +02:00
catcache.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
combocid.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
conffiles.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
date.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
datetime.h Support TZ and OF format codes in to_timestamp(). 2024-01-25 17:47:08 -05:00
datum.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
dsa.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
dynahash.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
elog.h Remove obsolete check in SIGTERM handler for the startup process. 2024-02-14 17:09:31 -06:00
evtcache.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
expandeddatum.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
expandedrecord.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
float.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
fmgrtab.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
formatting.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
freepage.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
geo_decls.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
guc.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
guc_hooks.h Introduce transaction_timeout 2024-02-15 23:56:12 +02:00
guc_tables.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
help_config.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
hsearch.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
index_selfuncs.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
inet.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
injection_point.h Add backend support for injection points 2024-01-22 10:15:50 +09:00
inval.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
json.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
jsonb.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
jsonfuncs.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
jsonpath.h Implement various jsonpath methods 2024-01-25 10:15:43 -05:00
logtape.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
lsyscache.h Make attstattarget nullable 2024-01-13 18:14:53 +01:00
memdebug.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
memutils.h Add EXPLAIN (MEMORY) to report planner memory consumption 2024-01-29 17:53:03 +01:00
memutils_internal.h Adjust memory allocation functions to allow sibling calls 2024-02-27 16:39:42 +13:00
memutils_memorychunk.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
meson.build Update copyright for 2024 2024-01-03 20:49:05 -05:00
multirangetypes.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
numeric.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
palloc.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
partcache.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
pg_crc.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
pg_locale.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
pg_lsn.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
pg_rusage.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
pgstat_internal.h Add inline incremental hash functions for in-memory use 2024-01-19 12:44:09 +07:00
pidfile.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
plancache.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
portal.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
ps_status.h Speedup and increase usability of set proc title functions 2023-02-20 16:18:27 +13:00
queryenvironment.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
rangetypes.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
regproc.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
rel.h Give SMgrRelation pointers a well-defined lifetime. 2024-01-31 12:31:02 +02:00
relcache.h Give SMgrRelation pointers a well-defined lifetime. 2024-01-31 12:31:02 +02:00
relfilenumbermap.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
relmapper.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
relptr.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
reltrigger.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
resowner.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
resowner_private.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
rls.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
ruleutils.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
sampling.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
selfuncs.h Teach estimate_array_length() to use statistics where available. 2024-01-04 18:36:19 -05:00
sharedtuplestore.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
snapmgr.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
snapshot.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
sortsupport.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
spccache.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
syscache.h Generate syscache info from catalog files 2024-01-23 07:31:06 +01:00
timeout.h Introduce transaction_timeout 2024-02-15 23:56:12 +02:00
timestamp.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
tuplesort.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
tuplestore.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
typcache.h Add planner support functions for range operators <@ and @>. 2024-01-20 13:57:54 -05:00
tzparser.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
usercontext.h Perform logical replication actions as the table owner. 2023-04-04 11:25:23 -04:00
uuid.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
varbit.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
varlena.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
wait_event.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
xid8.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
xml.h Update copyright for 2024 2024-01-03 20:49:05 -05:00