gpt4 book ai didi

swift - 在 Swift 中自动处理不安全分配的内存

转载 作者:行者123 更新时间:2023-11-28 14:28:31 25 4
gpt4 key购买 nike

在与低级操作系统功能交互的 Swift 程序中,我分配“不安全”内存块以缓冲数据。这些 block 存储在一个 struct 中,可以在程序的各个部分传递。我如何跟踪这些副本并确保在所有副本完成后释放内存块?

示例代码:

struct Packet {
var memoryBlock : UnsafeRawPointer
init () {
let block = UnsafeMutableRawPointer.allocate (bytes: 128, alignedTo: 4)
someProcessThatFillsTheBuffer (block);
memoryBlock = UnsafeRawPointer(block);
}
}

let packet = Packet()
process1.handle (packet); process2.handle (packet)

我如何确保分配的 block 在 process1 和 process2 都完成后被释放?

在 C++ 中,我会使用 shared_ptr 来跟踪分配。 Swift 有类似的东西吗?使用现有 ARC 系统的某种方式来做到这一点?

最佳答案

您可以定义一个 class 并在 deinit 中释放内存:

class Packet {
var memoryBlock : UnsafeRawPointer
init() {
let block = UnsafeMutableRawPointer.allocate(byteCount: 128, alignment: 4)
//someProcessThatFillsTheBuffer (block);
memoryBlock = UnsafeRawPointer(block);
}

deinit {
memoryBlock.deallocate()
}
}

现在 Packet 的实例是对一个对象的引用并且可以是转了一圈。 ARC(自动引用计数)确保在最后一次引用时调用deinit对象不见了。

关于swift - 在 Swift 中自动处理不安全分配的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51401949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com