4

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
4

1 に答える 1

4

Swift 4 では、このシグネチャが に変更されdeallocate()、 と比較して決定がはるかに容易になりましたfree(_:)

ハミッシュが指摘したように、deallocateSwift で安全でないポインターの割り当てを解除するための推奨される方法です。この事実は、API 設計者がこの関数型に配置してドキュメント化することで強化されますが、free(_:)グローバル スコープ (Swift ではほとんど適切ではありません) であり、ドキュメント化されていません。

于 2019-02-01T22:37:24.753 に答える