如何在UnsafeMutableRawPointer初始化内存

时间:2018-10-18 17:50:08

标签: swift

我正在使用UnsafeMutableRawPointer分配内存:

let p = UnsafeMutableRawPointer.allocate(bytes: 1000, alignedTo: MemoryLayout<UInt8>.alignment)

// do stuff

p.deallocate(bytes: 1000, alignedTo: MemoryLayout<UInt8>.alignment)

分配后,我想初始化内存,即将0x00写入刚分配的所有1000个字节。尽管进行了谷歌搜索,但我仍然看不到该怎么做。

“东西”是对C库的调用,该库将一些字节写入指针; my_c_func(p)

不幸的是,C函数希望所有字节均为NULL。我只有一个静态库,无法更改C代码。

1 个答案:

答案 0 :(得分:3)

initializeMemory(as:from:count:)

  

使用从给定指针开始的值初始化此指针引用的内存,将内存绑定到值的类型,然后将类型化的指针返回到已初始化的内存。

示例(Swift 4.2):

let p = UnsafeMutableRawPointer.allocate(byteCount: 1000, alignment: MemoryLayout<UInt8>.alignment)
p.initializeMemory(as: UInt8.self, repeating: 0, count: 1000)

// Do stuff ...

p.deallocate()

initializeMemory()方法返回类型的指针 需要它,所以你也可以写

let uint8ptr = p.initializeMemory(as: UInt8.self, repeating: 0, count: 1000)
// UnsafeMutablePointer<UInt8>