swift - Swift 3 中的对齐内存

标签 swift posix swift3

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

我一直用来调查问题的示例代码如下所示。 (它尝试分配一个 16K 对齐的 float 缓冲区。)

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 因“无效参数”而失败。消息。

有什么想法吗?

最佳答案

我意识到我的对齐不是 8 的倍数,而是 4 的倍数,这是无效对齐(posix_memalign 期望对齐是 UnsafeMutablePointer<Void> 长度的倍数)。

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

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

关于swift - Swift 3 中的对齐内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38384671/

相关文章:

c - `write(2)` 到本地文件系统的原子性

iphone - Swift 方法不会覆盖其父类(super class)中的任何方法

ios - 插入耳机时奇怪的 AVMutableComposition 行为

awk - 在 awk 中拆分包含换行符的外部变量的可移植方法?

c - 有没有可以使用libc中的fma函数的场景?

swift - 由于 'private' 保护级别,无法访问 func

ios - 在不阻止清除按钮的情况下禁用文本字段编辑

ios - 使用 AVAudioPlayer 使 UISlider 随进度更新

swift - 在 subview 中更新 ObservableObject 的 @Published 变量

ios - prepareForSegue 崩溃应用程序