<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<div class="markdown-here-wrapper" data-md-url="" style="">
<p style="margin: 0px 0px 1.2em !important;">Hi,<br>
you can still do that, using MemorySegment::ofAddress:</p>
<pre style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em; line-height: 1.2em;margin: 1.2em 0px;"><code style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;white-space: pre; overflow: auto; border-radius: 3px; border: 1px solid rgb(204, 204, 204); padding: 0.5em 0.7em; display: block !important;">
public MemorySegment allocate(long byteSize, long byteAlignment) {
if (byteAlignment > MAX_ALIGNMENT) {
throw new IllegalArgumentException();
}
try {
var arena = Arena.ofAuto();
long address = (long)MALLOC.invokeExact(byteSize); // I assume this should work since other reinterpret casts like unsigned <-> int is legal here
return MemorySegment.ofAddresss(address, byteSize, arena, () -> {
try {
FREE.invokeExact(address);
} catch(Throwable e) {
throw new RuntimeException(e);
}
});
} catch(Throwable e) {
throw new RuntimeException(e);
}
}
</code></pre>
<p style="margin: 0px 0px 1.2em !important;">That is, there is a
new overload in <code style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;">MemorySegment::ofAddress</code>
that does exactly what you want.</p>
<p style="margin: 0px 0px 1.2em !important;">I hope this helps.</p>
<p style="margin: 0px 0px 1.2em !important;">Cheers<br>
Maurizio</p>
<p style="margin: 0px 0px 1.2em !important;">On 04/03/2023 10:10,
Quân Anh Mai wrote:</p>
<p style="margin: 0px 0px 1.2em !important;"></p>
<div class="markdown-here-exclude">
<p></p>
<blockquote type="cite" cite="mid:CAPvyiyJ9fDJCF-Wj-=wNK9tM2DLBZ_SrGs3cTe9fhDCudZaPew@mail.gmail.com">
<div dir="ltr">Hi,
<div><br>
</div>
<div>I noticed that the method Arena::addCloseAction has
been dropped from the API. May I ask in that case what is
the way to create a custom allocator that manages its
allocated memory? With the method, I believe it can be
achieved with something like this:</div>
<div><br>
</div>
<div>public MemorySegment allocate(long byteSize, long
byteAlignment) {</div>
<div> if (byteAlignment > MAX_ALIGNMENT) {</div>
<div> throw new IllegalArgumentException();</div>
<div> }</div>
<div><br>
</div>
<div> try {</div>
<div> var arena = Arena.ofAuto();</div>
<div> long address =
(long)MALLOC.invokeExact(byteSize); // I assume this
should work since other reinterpret casts like unsigned
<-> int is legal here</div>
<div> arena.addCloseAction(() -> {</div>
<div> try {</div>
<div> FREE.invokeExact(address);</div>
<div> } catch(Throwable e) {</div>
<div> throw new RuntimeException(e);</div>
<div> }</div>
<div> });</div>
<div> return MemorySegment.ofAddress(address,
byteSize, arena);</div>
<div> } catch(Throwable e) {</div>
<div> throw new RuntimeException(e);</div>
<div> }</div>
<div>}</div>
<div><br>
</div>
<div>Thanks a lot,</div>
<div>Quan Anh</div>
<div> </div>
</div>
</blockquote>
<p></p>
</div>
<p style="margin: 0px 0px 1.2em !important;"></p>
<div title="MDH:PHA+SGksPGJyPnlvdSBjYW4gc3RpbGwgZG8gdGhhdCwgdXNpbmcgTWVtb3J5U2VnbWVudDo6b2ZBZGRyZXNzOjxicj48YnI+YGBgPGJyPjwvcD48ZGl2PnB1YmxpYyBNZW1vcnlTZWdtZW50IGFsbG9j
YXRlKGxvbmcgYnl0ZVNpemUsIGxvbmcgYnl0ZUFsaWdubWVudCkgezwvZGl2PjxkaXY+Jm5ic3A7
ICZuYnNwOyBpZiAoYnl0ZUFsaWdubWVudCAmZ3Q7IE1BWF9BTElHTk1FTlQpIHs8L2Rpdj48ZGl2
PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhj
ZXB0aW9uKCk7PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7IH08L2Rpdj48ZGl2Pjxicj48L2Rpdj48
ZGl2PiZuYnNwOyAmbmJzcDsgdHJ5IHs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyB2YXIgYXJlbmEgPSBBcmVuYS5vZkF1dG8oKTs8L2Rpdj48ZGl2PiZuYnNwOwogJm5ic3A7
ICZuYnNwOyAmbmJzcDsgbG9uZyBhZGRyZXNzID0gKGxvbmcpTUFMTE9DLmludm9rZUV4YWN0KGJ5
dGVTaXplKTsgLy8gSSBhc3N1bWUgCnRoaXMgc2hvdWxkIHdvcmsgc2luY2Ugb3RoZXIgcmVpbnRl
cnByZXQgY2FzdHMgbGlrZSB1bnNpZ25lZCAmbHQ7LSZndDsgCmludCBpcyBsZWdhbCBoZXJlPC9k
aXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgcmV0dXJuIE1lbW9yeVNlZ21lbnQu
b2ZBZGRyZXNzcyhhZGRyZXNzLCBieXRlU2l6ZSwgYXJlbmEsICgpIC0mZ3Q7IHs8L2Rpdj48ZGl2
PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
dHJ5IHs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBGUkVFLmludm9rZUV4YWN0KGFkZHJlc3MpOzwv
ZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyB9IGNhdGNoKFRocm93YWJsZSBlKSB7PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgdGhy
b3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IH08L2Rpdj48ZGl2PiZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyB9KTs8YnI+PC9kaXY+PGJyPjxkaXY+Jm5ic3A7ICZuYnNwOyB9
IGNhdGNoKFRocm93YWJsZSBlKSB7PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7
IH08L2Rpdj48ZGl2Pn08YnI+YGBgPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5UaGF0IGlzLCB0
aGVyZSBpcyBhIG5ldyBvdmVybG9hZCBpbiBgTWVtb3J5U2VnbWVudDo6b2ZBZGRyZXNzYCB0aGF0
IGRvZXMgZXhhY3RseSB3aGF0IHlvdSB3YW50LjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+SSBo
b3BlIHRoaXMgaGVscHMuPC9kaXY+PGRpdj48YnI+Q2hlZXJzPGJyPk1hdXJpemlvPGJyPjwvZGl2
PjxkaXY+PGJyPjwvZGl2PjxkaXYgY2xhc3M9Im1vei1jaXRlLXByZWZpeCI+T24gMDQvMDMvMjAy
MyAxMDoxMCwgUXXDom4gQW5oIE1haSB3cm90ZTo8YnI+PC9kaXY+PGJsb2NrcXVvdGUgdHlwZT0i
Y2l0ZSIgY2l0ZT0ibWlkOkNBUHZ5aXlKOWZESkNGLVdqLT13Tks5dE0yRExCWl9TckdzM2NUZTlm
aERDdWRaYVBld0BtYWlsLmdtYWlsLmNvbSI+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBl
IiBjb250ZW50PSJ0ZXh0L2h0bWw7ICI+PGRpdiBkaXI9Imx0ciI+SGksPGRpdj48YnI+PC9kaXY+
PGRpdj5JIG5vdGljZWQgdGhhdCB0aGUgbWV0aG9kIEFyZW5hOjphZGRDbG9zZUFjdGlvbiBoYXMg
YmVlbiBkcm9wcGVkIGZyb20gdGhlIEFQSS4gTWF5IEkgYXNrIGluIHRoYXQgY2FzZSB3aGF0IGlz
IHRoZSB3YXkgdG8gY3JlYXRlIGEgY3VzdG9tJm5ic3A7YWxsb2NhdG9yIHRoYXQgbWFuYWdlcyBp
dHMgYWxsb2NhdGVkIG1lbW9yeT8gV2l0aCB0aGUgbWV0aG9kLCBJIGJlbGlldmUgaXQgY2FuIGJl
IGFjaGlldmVkIHdpdGggc29tZXRoaW5nIGxpa2UgdGhpczo8L2Rpdj48ZGl2Pjxicj48L2Rpdj48
ZGl2PnB1YmxpYyBNZW1vcnlTZWdtZW50IGFsbG9jYXRlKGxvbmcgYnl0ZVNpemUsIGxvbmcgYnl0
ZUFsaWdubWVudCkgezwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyBpZiAoYnl0ZUFsaWdubWVudCAm
Z3Q7IE1BWF9BTElHTk1FTlQpIHs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7PC9kaXY+PGRpdj4mbmJzcDsg
Jm5ic3A7IH08L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgdHJ5IHs8L2Rp
dj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyB2YXIgYXJlbmEgPSBBcmVuYS5vZkF1
dG8oKTs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBsb25nIGFkZHJlc3Mg
PSAobG9uZylNQUxMT0MuaW52b2tlRXhhY3QoYnl0ZVNpemUpOyAvLyBJIGFzc3VtZSB0aGlzIHNo
b3VsZCB3b3JrIHNpbmNlIG90aGVyIHJlaW50ZXJwcmV0IGNhc3RzIGxpa2UgdW5zaWduZWQgJmx0
Oy0mZ3Q7IGludCBpcyBsZWdhbCBoZXJlPC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgYXJlbmEuYWRkQ2xvc2VBY3Rpb24oKCkgLSZndDsgezwvZGl2PjxkaXY+Jm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyB0cnkgezwvZGl2
PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7IEZSRUUuaW52b2tlRXhhY3QoYWRkcmVzcyk7PC9kaXY+PGRpdj4m
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IH0g
Y2F0Y2goVGhyb3dhYmxlIGUpIHs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyB0aHJvdyBuZXcgUnVu
dGltZUV4Y2VwdGlvbihlKTs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgfTwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7IH0pOzwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHJldHVy
biBNZW1vcnlTZWdtZW50Lm9mQWRkcmVzcyhhZGRyZXNzLCBieXRlU2l6ZSwgYXJlbmEpOzwvZGl2
PjxkaXY+Jm5ic3A7ICZuYnNwOyB9IGNhdGNoKFRocm93YWJsZSBlKSB7PC9kaXY+PGRpdj4mbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7PC9k
aXY+PGRpdj4mbmJzcDsgJm5ic3A7IH08L2Rpdj48ZGl2Pn08L2Rpdj48ZGl2Pjxicj48L2Rpdj48
ZGl2PlRoYW5rcyBhIGxvdCw8L2Rpdj48ZGl2PlF1YW4gQW5oPC9kaXY+PGRpdj4mbmJzcDsgJm5i
c3A7Jm5ic3A7PC9kaXY+PC9kaXY+Cgo8L2Jsb2NrcXVvdGU+" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0;"></div>
</div>
</body>
</html>