Re: Expand palloc/pg_malloc API
David G. Johnston <david.g.johnston@gmail.com>
From: "David G. Johnston" <david.g.johnston@gmail.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Peter Eisentraut <peter.eisentraut@enterprisedb.com>, Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com>, pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2022-07-26T23:58:55Z
Lists: pgsql-hackers
On Tue, Jul 26, 2022 at 2:32 PM Tom Lane <tgl@sss.pgh.pa.us> wrote: > > 2. I don't like the "palloc_ptrtype" name at all. I see that you > borrowed that name from talloc, but I doubt that's a precedent that > very many people are familiar with. > To me it sounds like it might > allocate something that's the size of a pointer, not the size of the > pointed-to object. I have to confess though that I don't have an > obviously better name to suggest. "palloc_pointed_to" would be > clear perhaps, but it's kind of long. > I agree that ptrtype reads "the type of a pointer". This may not be a C-idiom but the pointed-to thing is a "reference" (hence pass by value vs pass by reference). So: palloc_ref(myvariablepointer) will allocate using the type of the referenced object. Just like _array and _obj, which name the thing being used as a size template as opposed to instantiate which seems more like another word for "allocate/palloc". David J. P.S. Admittedly I'm still getting my head around reading pointer-using code (I get the general concept but haven't had to code them).... - lockrelid = palloc(sizeof(*lockrelid)); + lockrelid = palloc_ptrtype(lockrelid); // This definitely seems like an odd idiom until I remembered about short-lived memory contexts and the lost pointers are soon destroyed there. So lockrelid (no star) is a pointer that has an underlying reference that the macro (and the orignal code) resolves via the * I cannot reason out whether the following would be equivalent to the above: lockrelid = palloc_obj(*lockrelid); I assume not because: typeof(lockrelid) != (*lockrelid *)
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