同步操作将从 dwing/sharecode 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
import java.lang.foreign.Arena;import java.lang.foreign.MemorySegment;import java.lang.foreign.SegmentAllocator;import java.lang.foreign.ValueLayout;// 创建时必须用try-with-resources保证释放.// 创建出的MemStack对象及其分配出来的MemorySegment只能在当前线程的栈上(包括方法参数)传递,// 绝对不能传到堆上(对象/类的字段), 以确保生命期在所属的MemStack对象内,且没有并发访问.public class MemStack implements SegmentAllocator, AutoCloseable {private final int blockSize; // 每个内存段的大小private final Arena arena = Arena.ofConfined();private MemorySegment curSeg; // 当前正在分配的内存段private int offset; // curSeg已经分配的偏移private int allocSize; // 从arena分配的总大小public MemStack() {this(4096);}public MemStack(int blockSize) {this.blockSize = blockSize;}public int getAllocSize() {return allocSize;}@Overridepublic MemorySegment allocate(long byteSize, long byteAlignment) {if (byteSize < 0)throw new IllegalArgumentException("negative byteSize: " + byteSize);if (byteAlignment <= 0 || (byteAlignment & (byteAlignment - 1)) != 0)throw new IllegalArgumentException("invalid byteAlignment: " + byteAlignment);var seg = curSeg;if (seg == null) {allocSize += blockSize;curSeg = seg = arena.allocate(blockSize);}long off = offset;var mask = byteAlignment - 1;var lowBits = (seg.address() + off) & mask;if (lowBits != 0)off += byteAlignment - lowBits;var end = off + byteSize;if (end <= blockSize) {offset = (int)end;return seg.asSlice(off, byteSize);}if (byteSize <= (blockSize >>> 2)) {allocSize += blockSize;curSeg = seg = arena.allocate(blockSize);lowBits = seg.address() & mask;off = lowBits != 0 ? byteAlignment - lowBits : 0;end = off + byteSize;if (end <= blockSize) {offset = (int)end;return seg.asSlice(off, byteSize);}offset = 0;}//noinspection lossy-conversionsallocSize += byteSize;return arena.allocate(byteSize, byteAlignment);}@Overridepublic void close() {arena.close();}public static void main(String[] args) {try (var stack = new MemStack()) {var v1 = stack.allocateFrom(ValueLayout.JAVA_FLOAT, 12345);var v2 = stack.allocateFrom(ValueLayout.JAVA_LONG, 67890);System.out.println(stack.curSeg.address());System.out.println(v1.address());System.out.println(v2.address());System.out.println(stack.offset);System.out.println(stack.getAllocSize());}}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。