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 泄漏内存? 的相关文章

  • 如何在 C# 事件中区分更改是由代码还是由用户进行?

    我有一个简单的TextBox一开始是空的 我有一个简单的事件 TextChanged 可以知道用户何时更改了其中的任何内容TextBox 但是 如果我自己在代码中对其执行任何操作 该事件就会触发 喜欢设置textbox Text Test
  • .NET 可移植类库中的 .ToShortDateString 发生了什么

    我想知道为什么没有 ToShortDateString在 NET 可移植类库中 我有 2 个项目 Silverlight 和常规 NET 类库 使用相同的代码 并且代码涉及调用 ToShortDateString on a DateTime
  • 在 Windows Phone 上启动 pdf 文件时出现 System.Runtime.InteropServices.COMException

    我正在尝试使用我之前在另一个应用程序上使用过的以下工作代码打开 pdf 文件 但这一次 当流程到达此行时 我收到 System Runtime InteropServices COMException Windows System Laun
  • 使用 C# 使用应用程序密码登录 Office 365 SMTP

    在我们的 Office 365 公司帐户中实施两步身份验证之前 我的 C WPF 程序已成功进行身份验证并发送邮件 我使用了 SmtpClient 库 但现在我必须找到另一个解决方案 因为它不再起作用 我找不到任何使用 O365 应用程序密
  • 浮点提升:stroustrup vs 编译器 - 谁是对的?

    在 Stroustrup 的新书 C 编程语言 第四版 第 10 5 1 节中 他说 在执行算术运算之前 整数提升用于从较短的整数类型创建整数 类似地 浮点提升是用于从浮点数创建双精度数 我用以下代码确认了第一个声明 include
  • 当我单击 GridView 项时返回 ImageView 实例

    当我点击GridView项时如何返回ImageView实例 我为 ItemClick 创建自定义绑定事件 public class ItemClickSquareBinding MvxBaseAndroidTargetBinding pri
  • 对数字进行向上和向下舍入 C++

    我试图让我的程序分别向上和向下舍入数字 例如 如果数字是3 6 我的程序应该四舍五入最接近的数字 4 如果该数字是3 4 它将向下舍入为 3 我尝试使用ceil库获取 3 个项目的平均值 results ceil marks1 marks2
  • C++ 在 Vector 中使用不可分配的对象

    我想将对象列表存储在std vector 但对象包含引用且无法分配给 但是 我可以复制构造该对象 我能想到的唯一选择是使用指针来包装对象并在需要分配指针时重新设置指针 但这样做的语法会显着降低可读性 特别是在使用迭代器时 我更喜欢另一种选择
  • 通过 mpi 发送 c++ std::vector

    我知道存储一个std vector
  • 如何检测斑点并将其裁剪成 png 文件?

    我一直在开发一个网络应用程序 我陷入了一个有问题的问题 我会尝试解释我想要做什么 在这里您看到第一个大图像 其中有绿色形状 我想要做的是将这些形状裁剪成不同的 png 文件 并使它们的背景透明 就像大图像下面的示例裁剪图像一样 第一张图像将
  • 捕获当前正在播放的声音

    是否可以捕获计算机上当前播放的声音 如果能够将其保存为 mp3 就好了 但我认为这样做会存在一些法律问题 所以 wav 也可以 我环顾四周 有人建议使用虚拟音频线之类的东西 在 C 中捕获声音输出 https stackoverflow c
  • _mm_max_ss 在 clang 和 gcc 之间有不同的行为

    我正在尝试使用 clang 和 gcc 交叉编译一个项目 但在使用时发现一些奇怪的差异 mm max ss e g m128 a mm set ss std numeric limits
  • 为什么以下代码不允许我使用 fgets 获取用户输入但可以使用 scanf?

    这是一个更大程序的简短摘录 但该程序的其余部分无关紧要 因为我认为我能够隔离该问题 我怀疑这与我使用 fgets 的方式有关 我读过 最好使用 fgets 而不是 scanf 但我似乎无法让它在这里正常工作 当我使用以下代码时 程序不会给我
  • 如何使用 Clang 查找内存泄漏

    我在我的机器 ubuntu 中安装了 Clang 以便发现我的 C 代码中的内存泄漏 我编写了一个示例代码来检查它的工作情况 如下所示 File hello c for leak detection include
  • 用 C# 编写的带有点击移动的 WPF 游戏

    我试图将标签网格移动到鼠标的位置 就像冒险游戏中的移动一样 理想情况下 我会在途中删除并重新绘制它们 但是 现在我只想弄清楚如何将 int 转换为厚度或 pointtoscreen 到目前为止我有 player XMove int Mous
  • 改进C++逐行读取文件的能力?

    我正在解析大约 500GB 的日志文件 我的 C 版本需要 3 5 分钟 我的 Go 版本需要 1 2 分钟 我正在使用 C 的流来流式传输文件的每一行以进行解析 include
  • C# - 为什么我需要初始化 [Out] 参数

    我有几个从本机 dll 导入的方法 使用以下语法 internal static class DllClass DllImport Example dll EntryPoint ExampleFunction public static e
  • 有没有办法让 VS2010 在我的方法中扩展或收缩 try 块?

    我的代码有很多 try catch finally 块 与我在 VS2010 中的方法不同 除了添加区域之外 我无法在开发时扩展或收缩这些区域来隐藏内容 try vm R vm Qu vm T vm D vm Fil vm Type vm
  • 如何仅更改 DateTime 的日期部分,同时保留时间部分?

    我在代码中使用了很多 DateTime 我想将这些日期时间更改为我的特定日期并保留 时间 1 2012 02 02 06 00 00 gt 2015 12 12 06 00 00 2 2013 02 02 12 00 00 gt 2015
  • ASP.NET Core:会话 ID 始终变化

    今天启动了一个全新的 ASP NET Core 网站 按照说明添加会话 我们在索引页上打印出会话 ID 它始终是唯一的 我认为这可能是 cookie 合规性 所以我在 Chrome 的高级设置和调试器中删除了所有 cookie 但横幅不会再

随机推荐

  • 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