评估 C/C++ 内存泄漏时的虚拟内存与物理内存

2024-04-01

我有一个 C++ 应用程序,我试图解决内存泄漏问题,但我意识到我并不完全理解虚拟内存和物理内存之间的区别。

由于。。。导致的结果top(所以 16.8g = 虚拟,111m = 物理):

4406 um 20 0 16.8g 111m 4928 S 64.7 22.8 36:53.65 client

我的进程拥有 500 个连接,每个用户一个,这些数字意味着每个用户大约有 30 MB 的虚拟开销。在不深入研究我的应用程序的细节的情况下,将堆栈上的所有向量、结构、线程、函数等加在一起,听起来远程现实的唯一方法是,如果我不知道虚拟内存的实际含义。顺便说一句,没有 -O 优化标志。

所以我的问题是:

  • C++ 中的哪些操作会使虚拟内存膨胀这么多?
  • 如果我的任务使用千兆虚拟内存,这会出现问题吗?
  • 堆栈和堆函数变量、向量等 - 这些是否一定会增加物理内存的使用?
  • 会消除内存泄漏(通过delete or free()或类似)一定会减少物理和虚拟内存的使用?

虚拟内存是你的程序处理的事情。它由返回的所有地址组成malloc, new,等人。每个进程都有自己的虚拟地址空间。虚拟地址的使用理论上受到程序地址大小的限制:32位程序有4GB地址空间; 64 位程序的功能要多得多。实际上,进程可以分配的虚拟内存量小于这些限制。

物理内存芯片是焊接到主板上还是安装在内存插槽中。任何给定时间使用的物理内存量仅限于计算机中的物理内存量。

虚拟内存子系统将程序使用的虚拟地址映射到 CPU 发送到 RAM 芯片的物理地址。在任何特定时刻,您分配的大部分虚拟地址都未映射;因此,物理内存使用量低于虚拟内存使用量。如果您访问已分配但未映射的虚拟地址,操作系统会无形中分配物理内存并将其映射进去。当您不访问虚拟地址时,操作系统可能会取消物理内存的映射。

依次回答您的问题:

  • C++ 中的哪些操作会使虚拟内存膨胀这么多?

new, malloc,大数组的静态分配。通常,程序中需要内存的任何内容。

  • 如果我的任务使用千兆虚拟内存,这会出现问题吗?

这取决于您的程序的使用模式。如果您分配了大量您从未接触过的内存,并且您的程序是 64 位程序,那么您使用千兆虚拟内存可能没问题。

此外,如果您的内存使用无限制地增长,您最终将耗尽某些资源。

  • 堆栈和堆函数变量、向量等 - 这些是否一定会增加物理内存的使用?

不一定,但有可能。接触变量的行为至少暂时确保它(以及它“附近”的所有内存)位于物理内存中。 (旁白:像这样的容器std::vector可以分配在堆栈或堆上,但是包含对象在堆上分配。)

  • 消除内存泄漏(通过delete或free()等)一定会减少物理和虚拟内存的使用吗?

物理:可能。虚拟:是的。

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

评估 C/C++ 内存泄漏时的虚拟内存与物理内存 的相关文章

  • IIS应用程序池回收+quartz调度

    我正在 IIS 7 5 上运行一个 Web 应用程序 它需要偶尔回收 否则内存使用情况会失控 这是我正在研究的问题 当它回收时 它实际上不会运行 直到另一个请求到来 而quartz不会运行 有没有办法让IIS在回收应用程序池后立即自动启动1
  • 使用 CLion 进行 OpenCV Windows 设置

    我想在 Windows 上为 CLion IDE 设置 OpenCV 我尝试使用 OpenCV 3 1 和 2 4 得到相同的结果 我有 Windows 10 64 位 CLion 使用 cygwin 环境 到目前为止我做了什么 1 从Op
  • 多个源的 makefile

    在学习 make 文件时 我试图为多个源目录编写一个 make 文件 似乎我在某个地方错了 这是我的代码结构 directory common fun2 c inc fun h src fun1 c main c 这是我的生成文件 CC c
  • 有没有办法在 xcode 上使用 c++0x ?我想使用 gcc 4.4 或更高版本

    我想使用 gcc 4 4 或更高版本进行 iphone 开发 有人知道怎么做吗 不 你不知道 相信我 你不会 Apple 仍保留 gcc 4 2 1 因为 4 2 2 及更高版本使用 GPLv3 这意味着他们必须放弃对其平台的控制 对于 i
  • 检测wlan是否关闭

    任何人都可以给我一个提示 如何在 Windows Phone 上以编程方式检测 C 8 1 应用程序 不是 8 0 是否启用 禁用 WLAN 我不想更改这些设置 只是需要知道 该解决方案是一个 Windows 8 1 通用应用程序 Wind
  • 解析 JWT 令牌以仅获取有效负载内容,无需 C# 或 Blazor 中的外部库

    我正在使用 Blazor 编写可以访问 JWT 的客户端应用程序 我想知道一种简单的方法来读取令牌有效负载内容而不添加额外的依赖项 因为我不需要其他信息 也不需要验证令牌 我认为解析有效负载内容应该足够简单 只需将其写入方法即可 JwtTo
  • std::call_once 可重入且线程安全吗?

    std call once http en cppreference com w cpp thread call once是线程安全的 但它也是可重入的吗 我使用 VS2012 调试和发布 进行的测试表明 调用std call once从单
  • 检测到堆栈崩溃

    我正在执行我的 a out 文件 执行后 程序运行一段时间 然后退出并显示消息 stack smashing detected a out terminated Backtrace lib tls i686 cmov libc so 6 f
  • 在开关中使用“goto”?

    我看到了一个建议的编码标准 内容如下Never use goto unless in a switch statement fall through 我不跟 这个 例外 案例到底是什么样的 这证明了goto 此构造在 C 中是非法的 swi
  • C# 编译器不会优化不必要的强制转换

    前几天 在写答案的时候这个问题 https stackoverflow com questions 2208315 why is any slower than contains在这里 关于溢出 我对 C 编译器感到有点惊讶 它没有按照我的
  • 使用 C# 和 wpf 创建类似 Dock 的应用程序

    我需要创建一个与我们购买笔记本电脑时获得的应用程序类似的应用程序 仅当鼠标指针到达窗口顶部时它才可见 那么我怎样才能使用 C 4 0 来做到这一点呢 http www notebookcheck net uploads pics win2
  • 如何在三个 IEnumerable 上使用 Zip [重复]

    这个问题在这里已经有答案了 可能的重复 使用 Linq 从 3 个集合创建项目 https stackoverflow com questions 5284315 create items from 3 collections using
  • 英文日期差异

    接近重复 如何计算相对时间 https stackoverflow com questions 11 how do i calculate relative time 如何在 C 中计算某人的年龄 https stackoverflow c
  • 在 OpenGL 中渲染纹理 1 到 1

    所以我想做的是使用 OpenGL 和 C 将纹理渲染到平面上 作为显示图像的一种方式 但是我需要确保在渲染纹理时没有对纹理进行任何处理 抗锯齿 插值 平滑 模糊等 这是 OpenGL 处理渲染纹理的默认方式吗 或者是否需要设置一些标志才能禁
  • 如何在 winforms 应用程序的主屏幕显示之前显示欢迎屏幕?

    我想在应用程序启动时加载欢迎屏幕 然后用户单击欢迎屏幕上的按钮 然后关闭欢迎屏幕 最后显示主屏幕 static void Main startup method being called Application EnableVisualSt
  • 通过 Tab 键浏览 XML 文档字段

    In VB NET you can move through the fields in the XML member documentation with the Tab key 这在 C 中不起作用 还有其他方法吗 除了用鼠标将光标放在
  • 来自 3rd 方库的链接器错误 LNK2019

    我正在将旧的 vc 6 0 应用程序移植到 vs2005 我收到以下链接器错误 我花了几天时间试图找到解决方案 错误LNK2019 无法解析的外部符号 imp 创建AwnService 52 在函数 public int thiscall
  • 如何将 SQL“LIKE”与 LINQ to Entities 结合使用?

    我有一个文本框 允许用户指定搜索字符串 包括通配符 例如 Joh Johnson mit ack on 在使用 LINQ to Entities 之前 我有一个存储过程 该存储过程将该字符串作为参数并执行以下操作 SELECT FROM T
  • 如何使用placement new重新初始化该字段?

    我的课程包含字段 private OrderUpdate curOrderUpdate 我一遍又一遍地使用它 经常需要重新初始化 for int i 0 i lt entries size i auto entry entries i ne
  • 为什么匹配模板类上的部分类模板特化与没有模板匹配的另一个部分特化不明确?

    这个问题可能很难用标题中的句子来描述 但这里有一个最小的例子 include

随机推荐

  • 获取 Playwright 中输入元素的值

    如何返回 elem 的值以便我可以验证它确实是1 const elem await page input my input await elem fill 1 另外 从 v1 20 开始 还有toHaveValue可以验证元素值的匹配器 a
  • 如何使用 php 获取 XML 中所有现有标签的列表

    我有一个 xml 数据 如下所示
  • 替换 Camel v2.16.0 中已弃用的 beanRef()

    我们正在从 Camel v2 13 升级到 v2 16 并发现 beanRef 已被标记为已弃用 Apache Camel 推荐的替代 替代方案是什么 我在 Camel v2 16 0 文档网站上找不到任何有用的东西 甚至更新的示例尚不可用
  • 错误:在调用 FB.init() 之前调用了 FB.login()

    我使用这个 Facebook 登录按钮代码 div div
  • Jetty 如何处理具有不同依赖项的相同类的类加载?

    我想知道当多个依赖路径可能导致同一个类时 jetty 如何处理 例如 Jetty 预先打包了 JSTL 1 2 但我添加了一个依赖项来加载 JSTL 1 2 4 在编译时 如果我断点测试它在eclipse中下载源代码 它会在1 2 4版本处
  • 使用 MongoDB 进行两阶段提交

    这就是我的想法 当使用 MongoDB 等每个操作都是原子操作并且不支持除此之外的事务时 您是否发现这种模拟两阶段提交的解决方法有任何问题 transaction scope read message from servicebus Upd
  • Bootstrap 3选择内联输入形式

    我正在尝试获取输入并选择彼此内联的选项 例如该演示使用 Bootstrap 2 死链接 http bootply com 93408 遵循 Bootstrap 3 指南 我设法做到这一点 div class container div cl
  • 获取文本框中插入符号的位置

    如何获取 TextBox 控件可见客户区域中的插入符位置 x y 我需要向文本框添加自动完成功能 我发现了WPF 的解决方案 https stackoverflow com questions 1053539 finding the pos
  • Bash 'read' 命令在 Mac 上不接受 -i 参数。还有其他选择吗?

    我有一个 bash 脚本 在我的工作 Ubuntu 机器上运行良好 但遗憾的是 当我尝试在我的 Mac OSX Lion Mountain Lion 笔记本电脑上运行它时 它就崩溃了 杀死它的那行是这样的 while z SSHFS PAT
  • rufus cron 作业在 Apache/Passenger 中不起作用

    我有一个在 Apache Passenger 上运行的 Rails 应用程序 它有一个 rufus scheduler cron 作业 在后台运行并通过电子邮件发送通知 当我在 WEBrick 服务器上运行正在开发的应用程序时 电子邮件会像
  • 如何在地图视图中添加自定义标注视图

    我是 Objective C 中的 MapKit 新手 我可以在地图视图中添加自定义注释 我需要放置自定义标注视图 如下图所示 但我不明白如何设计这样的标注视图 我知道我需要在注释方法的视图中添加标注 MKAnnotationView ma
  • VB.net 中 json.net 的简单工作示例

    我从一个提供者那里得到了以下简化的 JSON 字符串 自从我使用 Visual Studio 和 vb Net 以来已经很长时间了 所以我很生疏 Venue ID 3145 Name Big Venue Clapton NameWithTo
  • 需要用Java将文件上传到S3上

    我最近开始在 AWS 上工作 我目前正在开发 S3 存储的上传功能 根据我的理解 可以有两种方法将文件上传到 S3 客户端的文件上传到我的服务器 我使用我的凭据将此文件上传到 S3 服务器 我还可以向客户端隐藏此信息 因为我不会显示上传详细
  • Java中识别具有相同内容的图像

    前段时间 我花了一些时间寻找如何确定两个图像是否相同的方法 以便回答这个问题 https stackoverflow com questions 8644960 java library to compare image similarit
  • 对于 Makefile 变量的每个目标

    我的 makefile 如下所示 apps app1 app2 app3 all dir app1 app2 app3 zip cleanup 现在我想在列表上做一些循环apps多变的 就像是 loop on apps endloop 是否
  • Leaflet:突然我收到此错误消息:无法加载资源:服务器响应状态为 403 ()

    突然我收到此错误消息 这对我来说很奇怪 因为我没有接触过地图部分 Failed to load resource the server responded with a status of 403 在寻找线索时 我发现了这个过时的信息 ht
  • 为什么按 Ctrl+“+”会在文本框中产生蜂鸣声?

    我正在与C and Windows Forms并想使用Ctrl Oemplus 作为一个函数key对于我的申请 我用一个German keyboard该键位于字母 P 右侧 2 个键 即 每当我按下此键与Ctrl重点是TextBox我听到一
  • 对象不包括列表理解中的方法

    这个问题与我之前的问题 https stackoverflow com questions 65021583 list comprehensions with class objects以及比尔的回应 我在 subfile py 中有一个名
  • MySQL 外键 - 如何强制跨表一对一?

    如果我在MySQL中有一个表代表一个基类 并且我有一堆表代表派生类中的字段 每个表都用外键引用回基表 有什么方法可以让MySQL强制派生表和基表之间的一对一关系 还是必须在代码中完成 以下面的快速 n 脏模式为例 有没有办法让MySQL确保
  • 评估 C/C++ 内存泄漏时的虚拟内存与物理内存

    我有一个 C 应用程序 我试图解决内存泄漏问题 但我意识到我并不完全理解虚拟内存和物理内存之间的区别 由于 导致的结果top 所以 16 8g 虚拟 111m 物理 4406 um 20 0 16 8g 111m 4928 S 64 7 2