glib2 是否真的会使用 ALWAYS-MALLOC 泄漏内存?

2024-01-08

这个问题是not许多其他人的重复,因为我do use G_DEBUG=gc-friendly and G_SLICE=always-malloc这是源代码:

#include <glib.h>

int main (int argc, char *argv[])
{
    GHashTable *ht;
    ht=g_hash_table_new(g_str_hash,g_str_equal);
    g_hash_table_insert(ht,"foo","bar");
    g_hash_table_destroy(ht);
    return 0;
}

这是 Valgrind 在这段代码上的输出:

# G_DEBUG=gc-friendly G_SLICE=always-malloc valgrind --leak-check=full --show-reachable=yes ./test_vg
==1880== Memcheck, a memory error detector
==1880== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
==1880== Using Valgrind-3.6.0 and LibVEX; rerun with -h for copyright info
==1880== Command: ./test_vg
==1880==
==1880==
==1880== HEAP SUMMARY:
==1880==     in use at exit: 1,260 bytes in 3 blocks
==1880==   total heap usage: 5 allocs, 2 frees, 1,524 bytes allocated
==1880==
==1880== 252 bytes in 1 blocks are still reachable in loss record 1 of 3
==1880==    at 0x4A04A28: calloc (vg_replace_malloc.c:467)
==1880==    by 0x35C8241707: g_malloc0 (in /lib64/libglib-2.0.so.0.2200.5)
==1880==    by 0x35C8255742: ??? (in /lib64/libglib-2.0.so.0.2200.5)
==1880==    by 0x35C825669D: g_slice_alloc (in /lib64/libglib-2.0.so.0.2200.5)
==1880==    by 0x35C822B1D2: g_hash_table_new_full (in /lib64/libglib-2.0.so.0.2200.5)
==1880==    by 0x400671: main (in /home/data/test_vg)
==1880==
==1880== 504 bytes in 1 blocks are still reachable in loss record 2 of 3
==1880==    at 0x4A04A28: calloc (vg_replace_malloc.c:467)
==1880==    by 0x35C8241707: g_malloc0 (in /lib64/libglib-2.0.so.0.2200.5)
==1880==    by 0x35C8255722: ??? (in /lib64/libglib-2.0.so.0.2200.5)
==1880==    by 0x35C825669D: g_slice_alloc (in /lib64/libglib-2.0.so.0.2200.5)
==1880==    by 0x35C822B1D2: g_hash_table_new_full (in /lib64/libglib-2.0.so.0.2200.5)
==1880==    by 0x400671: main (in /home/data/test_vg)
==1880==
==1880== 504 bytes in 1 blocks are still reachable in loss record 3 of 3
==1880==    at 0x4A04A28: calloc (vg_replace_malloc.c:467)
==1880==    by 0x35C8241707: g_malloc0 (in /lib64/libglib-2.0.so.0.2200.5)
==1880==    by 0x35C825578B: ??? (in /lib64/libglib-2.0.so.0.2200.5)
==1880==    by 0x35C825669D: g_slice_alloc (in /lib64/libglib-2.0.so.0.2200.5)
==1880==    by 0x35C822B1D2: g_hash_table_new_full (in /lib64/libglib-2.0.so.0.2200.5)
==1880==    by 0x400671: main (in /home/data/test_vg)
==1880==
==1880== LEAK SUMMARY:
==1880==    definitely lost: 0 bytes in 0 blocks
==1880==    indirectly lost: 0 bytes in 0 blocks
==1880==      possibly lost: 0 bytes in 0 blocks
==1880==    still reachable: 1,260 bytes in 3 blocks
==1880==         suppressed: 0 bytes in 0 blocks
==1880==
==1880== For counts of detected and suppressed errors, rerun with: -v
==1880== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 6 from 6)

是内存泄漏吗?


回答你的问题:不,这不是传统意义上的内存泄漏。你的代码没问题。

即使你使用G_DEBUG=gc-friendly and G_SLICE=always-malloc,GLib 在退出时总是留下“仍然可访问”的内存。不要使用--show-reachable=yes选项,否则在使用 GLib 时,您将始终得到受污染的 Valgrind 输出。但是,如果您分配在静态变量或全局变量中保留指针的内存(“仍然可访问”内存),请务必小心。在这种情况下,您最终可能会忽略自己的“真实”泄漏。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

glib2 是否真的会使用 ALWAYS-MALLOC 泄漏内存? 的相关文章

随机推荐

  • Ember.js:折叠/推迟昂贵的观察者或计算属性

    在 Ember 应用程序中 假设您有一个观察者或一个观察数组的属性 如下所示 topContributor function loop over articles hence slow property email protected cd
  • 如何获取我的应用程序的“可用”处理器数量?

    我知道如何获取计算机上的物理处理器数量和逻辑处理器数量 但我想知道我的应用程序可以访问多少个逻辑处理器 例如 我在四核机器上进行开发 但我有许多单核用户 并且在许多情况下我 简化 了界面 或者遇到了多核系统从未遇到过的锁定问题 因此 为此
  • flutter 中 UniqueKey 的范围是什么?

    我是一个独特的人 我的意思是我与其他人不同在这世上 当我在flutter中创建UniqueKey时 什么是world它与其他的有何不同 A UniqueKey其唯一性与每个实例化对象都是一个单独的对象完全相同 并没有什么神奇之处实施Uniq
  • 在模拟器 Swift 上运行自定义键盘时出错

    我正在尝试制作自定义键盘 对于简单的自定义键盘 它运行良好 但是在单击表情符号时 它显示以下错误 viewServiceDidTerminateWithError 错误域 UIViewServiceInterfaceErrorDomain
  • Google PubSub Python 多个订阅者客户端接收重复消息

    我有一个非常简单的应用程序 可以启动 PubSub 订阅者 StreamingPull 客户端 我已将其部署在 Kubernetes 上 以便可以扩展 当我部署一个 Pod 时 一切都会按预期进行 当我扩展到 2 个容器时 我开始收到重复的
  • 棒棒糖主题问题

    我在我的项目中使用 sherlock 操作栏 我使用了 Theme Sherlock Light DarkActionBar
  • 努力让 Boost 库单元测试框架正常工作

    我已经使用 VS2013 成功构建了 Boost 库 我还成功地包含并使用了一些 Boost Filesystem 和 Boost Log 的东西 但是 我正在努力让以下单元测试在 Visual Studio 2013 中运行 define
  • Project Loom:使用虚拟线程时,是什么让性能更好?

    为了提供一些背景信息 我关注 Loom 项目已经有一段时间了 我读过了Loom 的状态 http cr openjdk java net 7Erpressler loom loom sol1 part1 html why 我做过异步编程 异
  • 什么是主要类型?

    OCaml 编译器有一个 principal 选项 邮件列表中有时会提到术语 principal type 它到底是什么意思 维基百科中的定义是递归的 因为它假设读者已经熟悉这个概念 类型推断的过程就是猜测给定用户编写的程序 该程序的类型是
  • 将两个 ArrayList 添加到一个哈希图 ArrayList

    我有两个ArrayList我想做一个ArrayList通过添加它们 两个列表具有相同的大小 我打算这样做 这是优化的还是当列表变大时我可以让它变得更好 更高效 i e private ArrayList
  • Material UI:样式闪烁然后消失

    在此 SSR 应用程序的以下代码中 样式可能会出现 50 毫秒并消失 我很好奇是什么原因造成的 This component is a child of index tsx in the pages folder
  • GitHub - 如何从一个分支创建两个拉取请求

    我已经分叉了一个开源存储库 在我的分叉上编写了数千行代码 并在原始项目上创建了拉取请求 与此同时 我修复了另一个与我的第一个拉取请求完全无关的错误 我想专门针对此错误创建第二个拉取请求 它不包含第一个拉取请求中的任何工作 不需要我再次分叉存
  • 在Java中模拟鼠标在非活动窗口的某个位置单击?

    不管怎样 我正在构建一个在后台运行的机器人 这个机器人需要我点击 当然 我希望能够在机器人运行时做其他事情 所以我想知道是否可以在非活动窗口的某个位置模拟鼠标单击 如果可能的话 如果你们中有人能帮助我 我将不胜感激 java awt Rob
  • 在 Xamarin 中创建自定义控件

    我正在将我的应用程序从 Windows Phone 8 移植到 Android 并且我需要创建一些自定义 UI 控件 我尝试创建一个 XML 布局 在其中创建一个 LinearLayout 作为控件 然后动态添加它 根据用户的意愿 但这不起
  • 如何使用 PHP 实现工厂类 - 依赖注入

    以下面的代码作为我想要的示例 class SomethingController extends Factory private somethingRepository public function Construct ISomethin
  • 如何使用现有的 pom.xml 将 3rd 方文件发布到远程 Maven 存储库?

    我有一些第三方 jar 想要上传到我的 Nexus maven 存储库 到目前为止我已经找到了两种方法来做到这一点 使用 Nexus GUI 使用以下说明 http maven apache org guides mini guide 3r
  • 这是什么时间格式?如何将其转换为标准化的 dd/mm/yyyy 日期?

    我正在使用 YouTube Google API 对于特定视频的上传日期 将返回以下格式的时间 日期 2012 05 16T17 15 29 000Z 我不确定这是什么格式 但我想知道是否有一种简单的方法 例如使用DateTime 将其转换
  • 使用 folium 中的地理数据框绘制彩色多边形

    我正在尝试在 folium 中绘制雷达数据 而且我已经快完成了 我按照这个例子 在边界内绘制等高线图数据 纬度 经度 值 并导出 GeoJSON https stackoverflow com questions 34886899 cont
  • 在 Android 上解析 ~1 MB JSON 非常慢

    我的资产文件夹中存储了一个大约 1MB 的 JSON 文件 每次运行时我都需要在应用程序中加载该文件 我发现内置的 JSON 解析器 org json 解析文件的速度非常慢 但是一旦解析完成 我就可以非常快速地访问和操作数据 我计算出从我点
  • glib2 是否真的会使用 ALWAYS-MALLOC 泄漏内存?

    这个问题是not许多其他人的重复 因为我do use G DEBUG gc friendly and G SLICE always malloc这是源代码 include