1

的文档OSData“......您可以向它们添加字节并覆盖字节数组的部分。” . 我可以看到一种附加字节的方法,但我不明白我如何能够覆盖缓冲区的一部分。

另一种选择是用于IONewZero分配一些我需要的类型的元素。我的情况是我只需要这个int

例子:

T* dataBuffer = IONewZero(T, SIZE);

然后解除分配:

IOSafeDeleteNULL(dataBuffer_, T, SIZE);

与使用/的解决方案相比,使用OSData对象有什么优势?IONewZeroIOSafeDeleteNULL

4

1 回答 1

1

我认为文档可能只是从OSData. 我在很多地方都看到过,尤其是 USBDriverKit。

OSData对于与其他 OSType 一起处理类似 plist 的数据结构(即设置和获取服务对象的属性)最有用:OSArray, OSDictionary,OSNumber等。它也用于带内(<= 4096 字节)“结构”参数用户客户端外部方法。

在这些场景之外,我能看到的唯一用途是当您绝对必须对一组数据进行引用计数时。但它肯定不是处理中数据的特别方便或高效的容器。如果您随后需要将数据发送到设备或将其映射到用户空间,IOBufferMemoryDescriptor则可能是一个更好的选择(并且也是引用计数),尽管它更重量级。

于 2020-05-28T20:08:59.377 回答