2016-07-14 12 views
1

以前のバージョンのSwiftでは、整列したメモリを割り当てて特定の操作を最適化するためにposix_memalign関数を使用できました。 Swift 3ベータ版(Xcode 8ベータ2)にアップグレードして以来、失敗していて、なぜその理由がわかりません。それは単にベータ版の問題かもしれません。あるいは、単に私がその関数とどのようにインターフェースしているかを変更するだけで済むかもしれません。Swift 3で整列されたメモリ

問題を調査するために使用していたサンプルコードを以下に示します。 (これは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がで失敗「無効な引数」。メッセージ。

アイデア?

答えて

1

私のアライメントは8の倍数ではなく、4の倍数で、無効なアライメント(posix_memalignはアライメントがUnsafeMutablePointer<Void>の長さの倍数になると予想しています)を認識しました。

私の配置を修正するだけで問題が解決されました。

さらに驚くべきことに、コードはSwift 2で動作しましたが、Swift 3(Xcode 8に含まれているベータ)での作業が停止しました。これに関連する唯一の変更は、以前のバージョンではUnsafeMutablePointerをnilにすることから、nilにすることができるという事実を反映するためにはオプションでなければならないという変更でした。

関連する問題