我正在使用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代码。
答案 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>