Swift:UnsafeMutablePointer.deallocate(capacity :)与free()的互操作性

约翰尼斯·比特纳(Johannes Bittner)

我可以使用UnsafeMutablePointer.deallocate(capacity:)以前使用分配了内存的指针malloc吗?即,deallocate行为是否类似free

发生这种情况的一种情况是从Swift调用C函数时,这些函数使用分配内存,malloc并期望调用方free()稍后再访问该内存。一个例子是LIBMTP_Detect_Raw_Devices功能(见这里的一个例子使用)。该函数期望调用者释放rawdevices在函数内部分配的内存()。

阿纳托利P

文档尚不清楚,但是测试表明存在互操作性。

malloc()在C中使用,然后deallocate()在Swift中调用并尝试使用Cfree()的指针(反之亦然)将导致运行时错误,但是如果仅使用deallocate()之一free(),但不能同时使用两者,则代码可以正常运行

类似地,在Swift中分配结构,然后deallocate()在Swift和free()C中(或相反)使用结构也会导致运行时错误。

也可以free()按照@jtbandes的建议在Swift中使用实际上,这种方法可能比调用更为安全deallocate()

至于文档,请参阅https://developer.apple.com/reference/swift/unsafemutablepointer

此外,您还可以UnsafeMutablePointer在此处浏览的源代码:https : //github.com/apple/swift/blob/master/stdlib/public/core/UnsafePointer.swift.gyb

我还没有时间弄清楚实现方式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章