【问题标题】:Aligned memory in Swift 3Swift 3 中的对齐内存
【发布时间】:2016-07-14 21:37:27
【问题描述】:

在以前的 Swift 版本中,我已经能够使用 posix_memalign 函数来分配对齐的内存来帮助优化某些操作。自从升级到 Swift 3 beta(包含 Xcode 8 beta 2)以来,它一直在失败,我不知道为什么。这可能只是测试版的一个问题,或者我只是需要更改我与函数的交互方式。

我用于调查该问题的示例代码如下所示。 (它尝试分配一个 16K 对齐的浮点数缓冲区。)

var pointer: UnsafeMutablePointer<Void>? = nil
let alignment: Int = 0x4
let length: Int = bufferSize

let ret = posix_memalign(&pointer, alignment, length * sizeof(Float))

if ret != noErr {
    let err = String(validatingUTF8: strerror(ret)) ?? "unknown error"
    fatalError("Unable to allocate aligned memory: \(err).")
}

posix_memalign 因“参数无效”而失败。消息。

有什么想法吗?

【问题讨论】:

    标签: swift posix swift3


    【解决方案1】:

    我意识到我的对齐方式不是 8 的倍数,而是 4 的倍数,这是无效的对齐方式(posix_memalign 期望对齐方式是 UnsafeMutablePointer&lt;Void&gt; 长度的倍数)。

    只需更正我的对齐方式即可解决问题。

    更令人惊讶的是,该代码在 Swift 2 中确实有效,但在 Swift 3(Xcode 8 中包含的测试版)中停止了工作。唯一相关的变化是在以前的版本中允许 UnsafeMutablePointer 为 nil 的转换,而现在它必须是可选的以反映它可以为 nil 的事实。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-13
      • 1970-01-01
      • 1970-01-01
      • 2017-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多