【发布时间】:2023-09-13 17:04:01
【问题描述】:
我正在使用 valgrind 检查 Linux 上存档/压缩工具 p7zip(Windows 上为 7zip)的堆分配。我从这里 (https://sourceforge.net/projects/p7zip/files/p7zip/) 下载了代码并构建它 (make all_test) 然后安装它 (./install.sh)。
安装后,会在 /usr/local/bin 中创建一个名为 '7Za' 的 shell 脚本,其内容为:
#! /bin/sh
"/usr/local/lib/p7zip/7za" "$@"
另外,在指定路径/usr/local/lib/p7zip/7za 上放置7za 的可执行文件。
现在,如果我使用这个命令运行 valgrind 来测试 7za(它基本上运行 shell 脚本)的内存使用情况,那么我只会得到 2KB 的堆使用量。
valgrind 7za x file.7z
然而,如果我直接使用 7za 二进制文件,我会得到大约 1MB 的高内存使用率,这看起来也是真实的:
valgrind /usr/local/lib/p7zip/7za x /home/z/Desktop/file.7z
类似地,当我构建代码时,会在那里创建一个包含 7za 可执行文件的 bin 目录。如果我从那里运行它,那么我会再次获得高且正确的内存使用率。
我试图了解这两种方法的区别。为什么使用已安装的应用程序(通过 shell 脚本运行)不能提供正确的内存使用情况。
【问题讨论】:
标签: linux shell heap-memory valgrind 7zip