I think if you have FFI take ownership of the memory with an `FFI::MemoryPointer`, then when the object goes out of scope, it will be released automatically... and you can ditch the `ensure` below.  Since the difference between `FFI::Pointer` and `FFI::MemoryPointer` is a bit subtle, I think it might be a bit safer (I almost wish the latter were named something a little more indicative of it's behavior, like `FFI::AutoReleaseMemoryPointer` or something)