如何在 Linux 上用 C 检查堆栈和堆的使用情况?

2023-12-31

有没有办法在Linux上检索C中的堆栈和堆使用情况?

我想知道堆栈/堆专门占用的内存量。


如果您知道进程的 pid(例如 1234),则可以使用pmap 1234命令,打印内存映射。您还可以阅读/proc/1234/maps文件(实际上是一个文本文件伪文件因为它不存在于磁盘上;它的内容是由内核延迟合成的)。读proc(5) http://man7.org/linux/man-pages/man5/proc.5.html手册页。它是 Linux 特定的,但灵感来自/proc文件系统 https://en.wikipedia.org/wiki/Procfs在其他 Unix 系统上。

(you'll better open, read, then close that pseudo-file quickly; don't keep a file descriptor on it open for many seconds; it is more a "pipe"-like thing, since you need to read it sequentially; it is a pseudo-file without actual disk I/O involved)

从你的程序内部,你可以读到/proc/self/maps文件。尝试一下
cat /proc/self/maps在终端中命令查看虚拟地址空间 https://en.wikipedia.org/wiki/Virtual_address_space的地图process https://en.wikipedia.org/wiki/Process_%28computing%29运行那个cat命令,以及cat /proc/$$/maps查看当前 shell 的映射。

所有这些都为您提供了进程的内存映射,并且它包含它使用的各种内存段(特别是堆栈、堆和各种动态库的空间)。

您还可以使用getrusage系统调用。

另请注意,对于多线程,每个thread https://en.wikipedia.org/wiki/Thread_%28computing%29一个进程有自己的调用栈 https://en.wikipedia.org/wiki/Call_stack.

您还可以解析/proc/$pid/statm or /proc/self/statm伪文件,或/proc/$pid/status or /proc/self/status one.

但另请参阅Linux 吃掉了我的 RAM http://www.linuxatemyram.com/一些提示。

考虑使用valgrind http://valgrind.org/(至少在 Linux 上)进行调试内存泄漏 https://en.wikipedia.org/wiki/Memory_leak.

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

如何在 Linux 上用 C 检查堆栈和堆的使用情况? 的相关文章

随机推荐

  • SonarQube 不包括文件、目录和生成的代码?

    我正在使用的代码库有很多生成的代码 此外 还有一些我想从 SonarQube 分析中排除的已弃用文件 我已经阅读了文档并查看了这里的一些答案 但这对我的情况没有帮助 我有一个多模块 Maven 项目 因此 我的工作区中有多个项目 它们都是大
  • Spark MLLib 2.0 管道中的分类特征

    我正在尝试构建基于日志文件的决策树 某些功能集很大 包含数千个唯一值 我正在尝试在 Java 中使用管道和数据框架的新习惯用法 我为每个分类特征列构建了一个具有多个 StringIndexer 管道阶段的管道 然后我使用 VectorAss
  • 使用Spring,为什么H2事务回滚在嵌入式数据库模式下可以正常工作,但在服务器模式下却不能正常工作?

    一个简单的 spring 服务 其方法执行插入并在插入后抛出运行时异常 运行时异常应该导致回滚 Transactional public void insertAndThrowRuntimeEx Order order new Order
  • Python 2.7 64 位错误地引用 32 位 (x86) 的包含文件

    我正在使用 64 位的 Python 2 7 18 进行一些遗留工作 例如 当 PIP 调用编译器 Python 的 VC 时 它会错误地引用 32 位 x86 源来查找包含文件 IC Program Files x86 MySQL MyS
  • 添加上下文来重写规则

    在下面的代码中 我想重写g f as h如果可能 可能有案例h还没有类的实例 但我想在可能的情况下进行重写 我收到一条错误消息 表明这是可以实现的 但我不确定我到底需要更改什么 这是一些示例代码 LANGUAGE TypeFamilies
  • 当应用程序进入后台时,iOS 外部配件断开连接

    我有一个外部配件 当应用程序进入后台时 它似乎会断开连接 有什么办法可以解决这个问题吗 在您的应用程序 plist 文件中添加以下标志 所需的后台模式 应用程序与配件通信 此解决方案仅适用于 iOS 5 及更高版本
  • 任何人都可以帮助我理解运行 ngserve (Angular 8) 时 cmd 中的这条消息吗?

    当我跑步时ng serve这是输出 我无法理解它的含义 谁能告诉它是否是一个错误 i wds Project is running at http localhost 4200 webpack dev server i wds webpac
  • 获取 iOS 中当前的设备语言?

    我想显示设备用户界面当前使用的语言 我会使用什么代码 我想要这个作为NSString以完全拼写的格式 不是 en US 编辑 对于那些路过的人来说 这里有大量有用的评论 因为答案随着新的 iOS 版本而演变 提供的解决方案实际上将返回设备的
  • C++ 中的类型转换

    我正在使用 C 编程原理与实践 这本书学习 C 两个月 现在我想澄清一些关于我的选角的疑问 当我执行隐式转换时 例如 char c a int b c 这里 c 的值被隐式转换为 int 类型 而不使用任何显式运算符 这算不算选角 或者当我
  • 如何根据一年中的星期计算每月中的星期?

    我找到了一个node js https stackoverflow com questions 33647513 get the week number of the month from week number of the year解决
  • 如何在优先约束编辑器中使用在执行 SQL 任务中创建的变量值?

    I need to run n multiple Execute SQL Task based on n multiple variable value isnull true or false This variable is creat
  • Windows 文件名中的分号

    我的一位用户问为什么我的应用程序不支持文件名中的分号 我单步执行了我的代码 看起来 Windows 功能获取打开文件名截断任何包含分号的文件名 例如 一 二 wav gt 一 微软说不允许使用冒号 但没有提到分号 命名文件 路径和命名空间
  • 使 HTML 内容展开以填充窗口

    我有一个 HTML 页面 垂直分为 Header Body Footer 身体又被水平分为 左侧有一个大 DIV 周围有滚动条 显示图表的一部分 右边有一个表格 页眉和页脚是固定高度的 正文应垂直扩展以填充窗口中未被页眉和页脚占据的部分 同
  • 使用Spring(mvc)进行文件上传和下载

    我对 Spring MVC 很陌生 但对 Java 并不陌生 我正在尝试向数据库上传数据以及从数据库下载数据 我在这个网站上做了类似的事情 使用 spring mvc 文件上传和下载 https gardiary wordpress com
  • 无法使用 urllib2 从网络保存图像

    我想使用 python 保存网站上的一些图像urllib2但是当我运行代码时它会保存其他东西 这是我的代码 user agent Mozilla 4 0 compatible MSIE 5 5 Windows NT headers User
  • 为什么 CUDA 内核中 z 始终为零

    我正在使用 Cudafy 在 NVIDIA GPU 上进行一些计算 Quadro K1100M 功能 3 0 如果重要的话 我的问题是 当我使用以下内容时 cudaGpu Launch new dim3 44 8 num new dim 8
  • 在 Oracle SQL Developer 代码窗口中运行带有变量的 sql 代码

    我正在使用 Oracle SQL Developer 编写代码 我有一个有效的简单选择语句 SELECT CFS CAE SEC ID CFS FM SEC CODE CFS LAST USER ID case when 1 1 then
  • 导出使用 Proguard 的应用程序时出错

    我尝试在我的应用程序中使用 Proguard 我在 proguard cfg 文件中编写了这段代码 optimizationpasses 5 dontusemixedcaseclassnames dontskipnonpubliclibra
  • 删除时 AWS S3 访问被拒绝

    我有一个可以毫无问题地写入的存储桶 但是 当我尝试删除对象时 出现错误 AccessDeniedException in NamespaceExceptionFactory php line 91 遵循非常基本的示例here http do
  • 如何在 Linux 上用 C 检查堆栈和堆的使用情况?

    有没有办法在Linux上检索C中的堆栈和堆使用情况 我想知道堆栈 堆专门占用的内存量 如果您知道进程的 pid 例如 1234 则可以使用pmap 1234命令 打印内存映射 您还可以阅读 proc 1234 maps文件 实际上是一个文本