gpt4 book ai didi

swift - Swift 3 中的对齐内存

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

在以前的 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/

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