首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS UnsafePointer内存释放

iOS UnsafePointer内存释放
EN

Stack Overflow用户
提问于 2018-03-27 22:20:16
回答 1查看 194关注 0票数 0

我使用的是一个硬件设备,它运行C++代码,几乎每秒向iOS设备发送10次实时数据。

我有一个类似这样的Swift方法:

代码语言:javascript
复制
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在哪里

代码语言:javascript
复制
typedef uint8_t m16bytes_t[16];

metrics_E0

代码语言:javascript
复制
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类型,会发生什么?

EN

回答 1

Stack Overflow用户

发布于 2018-03-27 23:03:15

bindMemory不会改变已分配内存的所有权,它的目标是允许您达到内存内容的峰值。除非在C++库的文档中指定需要手动释放接收到的指针,否则您不需要担心这一点。

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49515403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档