Как инициализировать память в UnsafeMutableRawPointer - PullRequest
0 голосов
/ 18 октября 2018

Я выделяю память, используя UnsafeMutableRawPointer:

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

// do stuff

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

После выделения я хотел бы инициализировать память, то есть записать 0x00 во все 1000 байтов, которые я только что выделил.Несмотря на поиск в Google, я просто не вижу, как это сделать.

"do stuff" - это вызов библиотеки C, которая записывает несколько байтов в указатель;my_c_func (p)

К сожалению, функция C хотела бы, чтобы все байты были равны NULL.Все, что у меня есть, это статическая библиотека, я не могу изменить код на Си.

1 Ответ

0 голосов
/ 18 октября 2018

Существует 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...