【问题标题】:Swift deallocate vs free usageSwift 解除分配与免费使用
【发布时间】:2017-09-28 19:15:47
【问题描述】:

我在 Swift 3 中使用以下调用分配字节:

let wordSize = 2
let numbytes = 1024*wordsize
var ptr = UnsafeMutableRawPointer.allocate(bytes: numbytes, alignedTo: wordSize)

问题是释放内存是否正确,这两个调用是否相同,或者我应该使用一个而不是另一个?

  free(ptr) // opt 1

  ptr.deallocate(bytes: numbytes, alignedTo: wordSize) //opt 2

【问题讨论】:

  • 比较How to handle UnsafeMutablePointer correctly。您应该使用 deallocate - free 可能有效,但这取决于 Swift 运行时的实现细节。
  • 我已经删除了 [swift3] 标签(再次)——因为它只针对与该版本的语言更改直接相关的问题,而你的不是。上面链接的问答(针对 Swift 2)(或多或少)回答了这一点,这一点很明显。
  • @Hamish 这个问题使用 Swift 3 语法。正如我在回答中指出的那样,Swift 4 中有一个适当的答案,语法不同。这会影响您从标签中删除语言版本的决定吗?我只是好奇;我真的不在乎这个问题被标记了什么
  • @BenLeggiero 特定于版本的标签仅用于针对特定版本的语言更改的问题(如其标签维基中所述),而不仅仅是有关使用该版本的代码的问题。我曾经编辑过很多问题以删除错误使用的版本标签,但最终因为它们被滥用太频繁而放弃了。

标签: swift unsafemutablepointer


【解决方案1】:

Swift 4 将此签名更改为deallocate(),与free(_:) 相比,更容易做出决定。

作为Hamish pointed outdeallocate 是在 Swift 中释放不安全指针的首选方式,API 设计人员将这个函数放在键入并记录它,而 free(_:) 是全局范围的(在 Swift 中很少适用)并且没有记录。

【讨论】:

    猜你喜欢
    • 2017-07-07
    • 2020-07-29
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    相关资源
    最近更新 更多