gpt4 book ai didi

c++ - iOS UnsafePointer 内存释放

转载 作者:行者123 更新时间:2023-11-28 14:54:23 26 4
gpt4 key购买 nike

我正在与运行 C++ 代码并向 iOS 设备发送几乎每秒 10 次实时数据的硬件设备进行交互。

我有一个像这样的 Swift 方法:

func m16b_to_mE0(_ pointer: UnsafePointer<m16bytes_t>) -> UnsafePointer<metrics_E0>? {
return UnsafeRawPointer(pointer).bindMemory(to: metrics_E0.self, capacity: MemoryLayout<metrics_E0>.size)
}

m16bytes_t 在哪里

typedef uint8_t m16bytes_t[16];

metrics_E0

struct metrics_E0 {
uint8_t tag;
uint8_t hr;
uint16_t c_speed;
uint16_t c_max_speed;
uint16_t c_met_power;
uint16_t c_speed_intensity;
uint16_t c_hr_exertion;
uint8_t hr_avg;
u3bytes_t c_acc_met_power; //typedef uint8_t u3bytes_t[3];
};

上面的 m16b_to_mE0 方法每秒被调用近 10 次,持续大约两个小时,或多或少。

我的问题是:在 bindMemorymetrics_E0 之后,是否需要为每个 UnsafeRawPointer 解除分配/取消初始化内存?如果是,如何?

如果我不注意从内存中手动解除分配/取消初始化 UnsafePointer 类型,会发生什么情况?

最佳答案

bindMemory 不会更改已分配内存的所有权,它的目标是让您能够访问内存的内容。除非在C++库的文档中指定需要手动释放接收到的指针,否则你应该不需要担心这个。

如果您想确定并监控应用程序的内存使用情况,您可以进行一些内存分析。或者,如果您有权访问 C++ 代码,则可以在 m16b_to_mE0 函数上设置一个断点并遍历堆栈跟踪,直到到达 C++ 区域,然后使用发送的指针检查稍后发生的情况到你的方法。

请注意,释放该缓冲区的内存可能需要一些用于释放的库专用函数,而不是标准函数,但这应该在库文档中指定。

关于c++ - iOS UnsafePointer 内存释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49515403/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com