[foreign-abi] RFR 8237899: Add support for scoped allocation
Jorn Vernee
jorn.vernee at oracle.com
Tue Jan 28 11:24:18 UTC 2020
Looks good.
Minor nits:
- in AllocationScope::allocate(long, long), you could replace `sp +=
(start - sp) + bytesSize;` with just `sp = start + bytesSize;`.
- in the test you have `assertTrue(!address.segment().isAlive());` but
could also use `assertFalse` and drop the negation.
Cheers,
Jorn
On 27/01/2020 20:14, Maurizio Cimadamore wrote:
> Hi,
> after having programmed a quite a bit with both the old and new
> jextract bindings, I noted a mismatch (which was recently pointed out
> by Michael too); in C local variables are just... variables allocated
> on stack. If you need a pointer to them, you can just use C's
> dereference operator (&) and be done.
>
> In Panama-ized code, going from a regular variable (e.g. an int) to a
> variable that can be dereferenced (e.g. a MemoryAddress containing an
> int) is quite convoluted - and involves creating a segment and filling
> its contents with the desired value (in the old API, we could use
> Pointer - but same story holds). Even worse, the Panama model forces a
> malloc for each variable, where in the C code all such variables are
> stack-allocated at basically zero cost.
>
> On top of the performance issue, there's also a usability issue, in
> that the user is responsible for manually cleaning up all such
> variable segments at the end of the method.
>
> The solution is to build a so called AllocationScope on top of a
> segment, of fixed size, which makes a single upfront allocation
> request (using malloc, for now) and then keeps returning slices from
> that same segment. The allocation scope makes use of the acquire()
> API, to make sure that returned segments cannot be closed by the user
> - deallocation happens when the entire allocation scope is closed.
>
> A number of overloads allows to support the allocate/initialize
> pattern so that a new int variable can be created as follows:
>
> scope.allocate(C_INT, 42)
>
> This relatively simple API massively simplifies the task of turning C
> code into Panama code, at least in the examples I've come across, and
> should help reducing allocation bottlenecks too (although we should do
> more investigation as to whether something better than malloc/free can
> be used here).
>
> Webrev:
>
> http://cr.openjdk.java.net/~mcimadamore/panama/8237899/
>
> Maurizio
>
>
>
More information about the panama-dev
mailing list