【问题标题】:Memory leak in Swift when binding memory绑定内存时Swift中的内存泄漏
【发布时间】:2022-07-14 03:28:53
【问题描述】:

我在 Mac 上的 Swift 中遇到了内存泄漏。我正在使用 Metal 为 GPU 上的计算创建一个缓冲区。当它们超出范围时,为它们创建的存储会自动删除,除非我将内容绑定到内存。

在这种情况下,即使缓冲区和绑定指针都超出范围,也不会删除内存。

我尝试手动释放缓冲区,但由于内存不是使用 malloc 分配的,所以失败了。

有没有办法管理这个内存以避免泄漏,或者这是 Mac 上的 Swift 中的一个错误?

还有其他想法吗?

非常感谢,

科林

let intensityBuff = myGPUData.device?.makeBuffer(length: MemoryLayout<Float>.stride * Int(myStars.nstars * myStars.npatch * myStars.npatch, options: .storageModeShared)

let intensityPointer = intensityBuff?.contents().bindMemory(to: Float.self,                                                       capacity: MemoryLayout<Float>.stride * Int(myStars.nstars * myStars.npatch * myStars.npatch))

【问题讨论】:

    标签: swift memory-leaks metal


    【解决方案1】:

    金属缓冲区需要设置标志MTLPurgeableState.empty,以指示在您使用完它们后可以将它们从内存中清除。例如:

    intensityBuff!.setPurgeableState(MTLPurgeableState.empty)
    

    【讨论】:

      猜你喜欢
      • 2020-03-19
      • 2015-06-29
      • 1970-01-01
      • 2019-12-18
      • 2012-05-25
      • 1970-01-01
      • 2021-03-19
      • 1970-01-01
      相关资源
      最近更新 更多