gpt4 book ai didi

c - 在 Pebble 中,exit() 上的 free()ing 内存真的有必要吗?

转载 作者:行者123 更新时间:2023-12-01 13:41:19 26 4
gpt4 key购买 nike

More C Concepts (Google webcache,不在互联网文件馆),我阅读了以下内容:

When the app is exiting or when the buffer is no longer needed, the memory must be freed for applications to use:

// Free dynamically allocated memory
free(s_buffer);

Learning C for the Pebble SDK ( Internet Archive ),我读到:

Unlike other languages (such as Python or JavaScript), the C language relies on the developers to manage any memory they use. This means that any memory allocated by a program for storing data must be freed up again by the developer so that other progams can make use of it.

我习惯于在非嵌入式场景中编程,在这种场景中,每个应用程序都有自己的地址空间,并且在进程终止时,操作系统会回收分配的内存。但是,Pebble SDK 的上述两个语句表明,如果我调用 malloc() 然后程序退出或在调用 free() 之前被终止, watch 将无法回收内存。它还显示了在事件循环退出等后取消初始化窗口的示例。

我真的希望,如果我需要在启动时动态计算一次缓冲区大小,我就不必担心在进程退出之前清理它。当然,对于生命周期短于进程的东西,我需要跟踪它们并清理它们以避免泄漏并导致我的应用程序内存不足。但是尝试对所有 执行此操作——更重要的是,以确保调用free()*_deinit() 的方式即使程序不正常地终止——看起来既浪费时间又不可能。

如何安全地编写 Pebble Watch 应用程序,以便在应用程序被终止时释放所有分配的内存?或者 Pebble 的操作系统是否像现代操作系统一样在应用程序终止时跟踪和清理应用程序分配的资源?

最佳答案

答案似乎是:

  • 是的,如果您的应用程序退出,无论是通过终止还是正常退出,一切都将在您之后清除
  • 确保 0B 报告为在退出时仍然分配是一个很好的做法,因为它有助于防止内存泄漏。

如您所见,官方文档几乎对这个主题只字不提,因此如果没有 Pebble 开发人员的声明,我们将无法获得明确的答案。不过,我们有几个接近的选择:第一个是求助于 Pebble 论坛:

我们还可以检查最可靠的来源,Reddit 的 /r/pebbledevelopers ,谁声称:

我们也可以看看 this set of slides ,特别是:

Size of Aplite stack

(我相信这只适用于 Aplite,又名 Pebble 1.O)

这表明没有太多应用程序“净空”——如果一个或多个应用程序开始泄漏并且没有被操作系统完全清理,它很快就会导致无法启动新应用程序。

总而言之:我不会太担心它。

关于c - 在 Pebble 中,exit() 上的 free()ing 内存真的有必要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39066789/

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