Hello,
On Tue, Jan 6, 2009 at 9:59 PM, Timothy Wall <twal...@dev.java.net> wrote:
On Jan 6, 2009, at 2:34 PM, Albert Strasheim wrote:
It seems like it would be more useful if Memory's align and share
methods returned Memory instead of Pointer. This change would allow
one to call getSize() on the SharedMemory returned when using these
methods to check on the size of the new buffer.
It'd also be nice if alignment simply allocated enough memory if it didn't
have it. This would probably need to be implemented as an option to align,
though, since there are probably cases where you *don't* want to reallocate
a buffer.
Agreed.
Yeah. Is there any system-independent way to allocate aligned memory
though, short of asking for a block big enough to align it?
Not that I know of. Linux has posix_memalign(3). I don't know about
other platforms. For my application this trick is fine.
I also think it could be useful if one could explicitly call free() on
a Memory instance instead of relying on the finalizer. This becomes
useful when one is dealing with many large buffers that use up most of
the available memory.
There used to be an explicit "free" in the original JNA CVS codebase, but I
removed it because it wasn't referenced internally and made necessary checks
for validity everywhere. At the time I thought it was a lot cleaner to not
have to worry about Memory being invalid until it was GCd.
In this case, making an ExplicitlyFreeableMemory class if you need it keeps
the core implementation simpler.
It seems I can't make this class in my own package because Pointer's
constructors are package-private. I am missing something, or is this
something that could be changed?
Regards,
Albert