【发布时间】:2016-01-25 03:15:47
【问题描述】:
我有一个内存引用 mBuffers.mData(来自 AudioUnit bufferList),在 OS X 和 iOS 框架头文件中声明为:
UnsafeMutablePointer<Void>
将大量 Int16 值写入此指针所引用的内存的有效方法是什么?
这个 Swift 源代码的反汇编:
for i in 0..<count {
var x : Int16 = someFastCalculation()
let loByte : Int32 = Int32(x) & 0x00ff
let hiByte : Int32 = (Int32(x) >> 8) & 0x00ff
memset(mBuffers.mData + 2 * i , loByte, 1)
memset(mBuffers.mData + 2 * i + 1, hiByte, 1)
}
显示了许多设置 memset() 函数调用的指令(比我的 someFastCalculation 中的指令多得多)。这是实时音频回调中的一个循环,因此最大限度地减少延迟和电池消耗的高效代码非常重要。
有没有更快的方法?
【问题讨论】:
-
之前计算的值和新计算的值之间是否存在依赖关系?如果没有,我们可以尝试使用 GCD 并行执行这个循环。
标签: swift core-audio unsafe-pointers