【问题标题】:g_hash_table_destroy() when called, does it frees up the buffer memoryg_hash_table_destroy() 调用时是否释放缓冲内存
【发布时间】:2015-03-23 10:17:06
【问题描述】:

我正在使用 GHashTable 将键值对插入表中,然后想要销毁表,使用 g_hash_table_destroy() 函数,这两者都发生在一个循环中。但是在这样做的同时,我正在观察正在使用的缓冲区/高速缓存。随着插入的完成,内存(空闲缓冲区/缓存内存)正在减少,但是当销毁工作时,反之亦然。

【问题讨论】:

    标签: c linux data-structures hashtable ubuntu-14.04


    【解决方案1】:

    您可能对应用程序如何释放内存有误解。典型的实现是应用程序不向操作系统返回内存;相反,内存被简单地标记为未分配并用于将来的 malloc() 调用。所以,如果你调用 allocate 一个大块,用数据填充它并调用 free(),并不能保证 free() 调用将内存返回给操作系统。

    无论如何,“free -m”并不是监控空闲内存的最佳方式。空闲内存只是浪费内存,智能操作系统使用本来可以空闲的内存用于更好的目的,例如在内存中缓存磁盘文件。空闲内存的最优值是尽可能低的。

    【讨论】:

    • 据我所知,“free -m”会在您运行程序时显示缓冲区/缓存内存(已使用和空闲)。关于您回答的第一部分,我正在分配一大块数据,填充它,但正在调用 GHashTable 的 destroy() 函数,这与您所理解的 free() 非常不同。
    • @RohitBhagat 如果您的键和值是动态分配的,那么您必须自己解除分配,除非您使用销毁通知程序创建了哈希表。 destroy() 将在后台调用 free()。尽管如此,您可能不会看到与“free -m”有任何区别,因为内存通常不会像 juhist 解释的那样释放回操作系统。
    • @nos 好的。所以,g_hash_table_destroy() 函数释放内存而不是操作系统,对吧?那我怎样才能持续监控正在释放的内存呢?在 ubuntu 的终端中是否有任何命令?
    • @RohitBhagat 我不知道有什么简单的方法。你也可以用 valgrind 运行你的程序,它至少会告诉你是否有内存泄漏。
    猜你喜欢
    • 2020-09-25
    • 2014-03-16
    • 2018-11-02
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 2017-07-27
    • 1970-01-01
    相关资源
    最近更新 更多