Hi, On 2021-11-05 09:48:16 -0700, Andres Freund wrote: > On 2021-11-05 08:34:26 -0400, Robert Haas wrote: > > I'm not sure why that requires all of this relative pointer stuff, > > honestly. Under that problem statement, we don't need everything to be > > one contiguous allocation. We just need it to have the same lifespan > > as the JITted code. If you introduced no relative pointers at all, > > you could still solve this problem: create a new memory context that > > contains all of the EvalExprSteps and all of the allocations upon > > which they depend, make sure everything you care about is allocated in > > that context, and don't destroy any of it until you destroy it all. > > I don't see how that works - the same expression can be evaluated multiple > times at once, recursively. So you can't have things like FunctionCallInfoData > shared. One key point of separating out the mutable data into something that > can be relocated is precisely so that every execution can have its own > "mutable" data area, without needing to change anything else.
Oh, and the other bit is that the absolute addresses make it much harder to generate efficient code. If I remove the code setting FunctionCallInfo->{context,flinfo} to the constant pointers (obviously incorrect, but works for functions not using either), E.g. TPCH-Q1 gets about 20% faster. Greetings, Andres Freund