Re: Expand palloc/pg_malloc API
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Robert Haas <robertmhaas@gmail.com>
Cc: Peter Eisentraut <peter.eisentraut@enterprisedb.com>,
Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com>,
pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2022-09-09T20:25:29Z
Lists: pgsql-hackers
Robert Haas <robertmhaas@gmail.com> writes: > On Fri, Aug 12, 2022 at 3:31 AM Peter Eisentraut > <peter.eisentraut@enterprisedb.com> wrote: >> (Personally, I have always been a bit suspicious about using the name >> palloc() without memory context semantics in frontend code, but I guess >> this is wide-spread now.) > I think it would be a good thing to add memory context support to the > frontend. We could just put everything in a single context for > starters, and then frontend utilities that wanted to create other > contexts could do so. Perhaps, but I think we should have at least one immediate use-case for multiple contexts in frontend. Otherwise it's just useless extra code. The whole point of memory contexts in the backend is that we have well-defined lifespans for certain types of allocations (executor state, function results, etc); but it's not very clear to me that the same concept will be helpful in any of our frontend programs. > There are difficulties, though. For instance, memory contexts are > nodes, and have a NodeTag. And I'm pretty sure we don't want frontend > code to know about all the backend node types. My suspicion is that > memory context types really shouldn't be node types, but right now, > they are. Whether that's the correct view or not, this kind of problem > means it's not a simple lift-and-shift to move the memory context code > into src/common. Someone would need to spend some time thinking about > how to engineer it. I don't really think that's much of an issue. We could replace the nodetag fields with some sort of magic number and have just as much wrong-pointer safety as in the backend. What I do take issue with is moving the code into src/common. I think we'd be better off just writing a distinct implementation for frontend. For one thing, it's not apparent to me that aset.c is a good allocator for frontend (and the other two surely are not). This is all pretty off-topic for Peter's patch, though. regards, tom lane
Commits
-
Add repalloc0 and repalloc0_array
- b4b7ce8061d3 16.0 landed
-
Expand palloc/pg_malloc API for more type safety
- 2864f7755611 10.23 landed
- e962235fe1f6 11.18 landed
- 7dd9b469bc56 12.13 landed
- 172882292451 13.9 landed
- b7f37af7c195 14.6 landed
- 7fe55d5e12b6 15.0 landed
- 2016055a92f2 16.0 landed
-
Assorted examples of expanded type-safer palloc/pg_malloc API
- 5015e1e1b58f 16.0 landed