3 ms·
Ah, I meant Java code manipulating off-heap memory. For Java I don't think there's a way to mix managed and unmanaged code like you do in C#/C++ CLR.
by rfoo 3y ago
Ah, I meant Java code manipulating off-heap memory. For Java I don't think there's a way to mix managed and unmanaged code like you do in C#/C++ CLR.
- neonsunset 3y agoIn C# you usually don't want to mix in C++. Manipulating off-heap memory is indeed easy - nowadays pointers to both object interiors, stack and unmanaged memory can be represented as `ref T` where T is byte, int, etc. These are then subsequently wrapped by `Span<T>` and `ReadOnlySpan<T>` respectively. This way a span can be a slice of memory that can have any origin: var fromStack1 = (stackalloc byte[32]); var fromStack2 = (Span<byte>)[0x20, 0x20, 0x20, 0x20]; var fromHeap = new byte[32].AsSpan(); unsafe { var ptr = NativeMemory.Alloc(32); var fromMalloc = new Span<byte>(ptr, 32); // Don't forget to free :) }
- pjmlp 3y agoPanama has helped into that direction, it isn't like C# though, for feature parity we will eventually need Valhalla, which since they want to keep existing JARs working, it is taking its time. Ignoring the type systems from Eiffel, Objective-C, Oberon and Modula-3 linage, even though they were inspirations for Java, has been shown to have been a bad decision in hindsight.