程序如何在内存中运行以及操作系统处理内存的方式

2024-01-04

我不清楚进程执行时的内存管理 在运行时

Here is a diagram enter image description here

我不清楚图像中的以下内容:

  • 1)该图像所指的堆栈是什么?
  • 2)什么是内存映射段,它指的是文件映射?
  • 3)堆与进程有什么关系。堆是仅在进程中处理还是堆是由操作系统内核维护的东西,然后当用户空间应用程序调用它时由 malloc (使用堆)分配内存空间?

文章提到http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory/ http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory/

虚拟地址空间,在 32 位模式下始终是 4GB 块 内存地址。这些虚拟地址被映射到物理地址 按页表存储,

  • 4) 这是否意味着一次只有一个程序在占用整个 4 GB RAM 的内存中运行?

同一篇文章还提到

Linux 通过添加随机化堆栈、内存映射段和堆 到它们起始地址的偏移量。不幸的是32位地址 空间非常紧张,几乎没有留下随机化的空间 妨碍其有效性。

  • 5)它是指随机化进程内的堆栈还是指计算所有进程的空间后剩下的东西?

1)该图像所指的堆栈是什么?

The stack http://en.wikipedia.org/wiki/Stack-based_memory_allocation用于分配局部变量和函数调用框架(包括函数参数、函数调用后返回的位置等)。

2)什么是内存映射段,它指的是文件映射?

内存映射段 http://en.wikipedia.org/wiki/Memory-mapped_file保存链接库。也是在哪里mmap呼叫已分配。一般来说,内存映射文件只是文件支持的内存区域。

3)堆与进程有什么关系。堆是仅在进程中处理还是堆是由操作系统内核维护的东西,然后当用户空间应用程序调用它时由 malloc (使用堆)分配内存空间?

The heap http://en.wikipedia.org/wiki/Heap_memory是特定于进程的,并且由进程本身管理,但是它必须首先从操作系统请求内存(并且根据需要)。你是对的,这通常是malloc呼叫已分配。然而,大多数malloc实现利用mmap请求内存块,因此堆和内存映射段之间的区别实际上较少。确实,堆could被视为内存映射段的一部分。

4) 这是否意味着一次只有一个程序在占用整个 4 GB RAM 的内存中运行?

不,这意味着数量可寻址的程序可用的内存仅限于 4 GB RAM,在任何给定时间内存中实际包含的内容取决于操作系统如何分配物理内存,并且超出了本问题的范围。

5)它是指随机化进程内的堆栈还是指计算所有进程的空间后剩下的东西?

我从未见过任何表明 4GB 空间“阻碍”操作系统使用的内存分配策略有效性的内容。此外,正如 @Jason 所指出的,堆栈、内存映射段和堆的位置是随机的,“以防止可预测的安全漏洞,或者至少使它们比操作系统管理的每个进程都包含可执行文件的每个部分要困难得多”完全相同的虚拟内存位置。”具体来说,操作系统正在随机化虚拟地址对于堆栈、内存映射区域和堆。在这一点上,进程看到的一切都是虚拟地址 http://en.wikipedia.org/wiki/Virtual_address,然后根据特定页面所在的位置映射到内存中的物理地址。有关虚拟地址和物理地址之间映射的更多信息可以找到here http://en.wikipedia.org/wiki/Page_table.

这个维基百科article http://en.wikipedia.org/wiki/Page_replacement_algorithm关于分页是学习操作系统如何在进程之间管理内存的一个很好的起点,并且是回答问题 4 和 5 的一个很好的资源。简而言之,内存是以页的形式分配给进程的,这些页要么存在于主内存,或已“调出”到磁盘。当进程请求内存地址时,它将将该页面从磁盘移动到主内存,并在需要时替换另一个页面。有多种页面替换策略可供使用,我建议您参阅本文以了解有关每种策略的优点和缺点的更多信息。

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

程序如何在内存中运行以及操作系统处理内存的方式 的相关文章

  • C 编程 - 文件 - fwrite

    我有一个关于编程和文件的问题 while current NULL if current gt Id Doctor 0 current current gt next id doc current gt Id Doctor if curre
  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • 关于 C++ 转换:参数 1 从“[some_class]”到“[some_class]&”没有已知的转换

    我正在研究 C 并且遇到了一个错误 我不知道确切的原因 我已经找到了解决方案 但仍然想知道原因 class Base public void something Base b int main Base b b something Base
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • WPF/C# 将自定义对象列表数据绑定到列表框?

    我在将自定义对象列表的数据绑定到ListBox in WPF 这是自定义对象 public class FileItem public string Name get set public string Path get set 这是列表
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new

随机推荐

  • 如何绑定“touchstart”和“click”事件但不响应两者?

    我正在开发一个必须在各种设备上运行的移动网站 目前最让我头疼的是黑莓手机 我们需要支持键盘点击和触摸事件 理想情况下我只使用 thing click function 但我们遇到的问题是 其中一些黑莓设备从触摸到触发点击之间存在非常烦人的延
  • 如何避免单线程NumPy转置的巨大开销?

    由于 NumPy 的转置函数 我目前遇到了巨大的开销 我发现这个函数实际上总是在单线程中运行 无论转置矩阵 数组有多大 我可能需要避免这种巨大的时间成本 据我了解 其他功能如np dot如果 numpy 数组足够大 则向量增量将并行运行 一
  • 具有多个 OR 的 IMAP 标准

    我正在使用 gmail 的 IMAP API 来搜索邮件 我使用 OR 条件来搜索不同的关键字 如果我只进入一个级别 这很有效 即类似 UID SEARCH OR FROM email protected cdn cgi l email p
  • 根据类似于 mysql 的标签选择相关标题

    TAGS tag id post id value 1 1 some 2 1 good 3 1 title 4 2 some 5 2 good 6 3 some 7 4 good 8 4 title POSTS post id title
  • Objective-C 是否禁止使用结构体?

    我是 Objective C 新手 我尝试使用一个简单的struct and got arc forbids objective c objects in struct 查找 ARC http clang llvm org docs Aut
  • Android:从设备浏览并上传应用程序中的 PDF 或 Word 文件

    我正在创建一个 Android 移动应用程序 用户可以在其中上传他 她的简历 然后将其发送到服务器 简历可以是 pdf 格式或 word 格式 如何浏览pdf和word文件 应该选择哪种类型来浏览这些文件 就像图像一样 我们有图像 Than
  • 添加新数据后如何刷新我的 datagridview

    我在寻找刷新 datagridview 的方法时遇到了很多麻烦 我尝试过 datagridview refresh datagridview Update 但它不起作用 这是我的代码 Imports System Data Imports
  • 在 MAC 中为 Eclipse 设置 JDK

    我买了一台 MacBookPro 我是这个操作系统的新手 我从 Oracle 网站下载了 JDK 并安装了它 Library Java JavaVirtualMachines jdk 1 7 所以当我输入 java version 时一切都
  • 在页面上显示 php 生成的图像

    我有一个用于修改图像的函数 我想在我的页面上与其他页面内容一起显示这些图像 PHP图像函数
  • 为什么我使用=(单个等于)的相等比较不能正常工作? [复制]

    这个问题在这里已经有答案了 我正在尝试检查字符串是否为空 小于或等于 9 位数字或最多 10 位数字 但它始终遵循else if str length lt 9 if str console log The string cannot be
  • 如何像 Wildfireapp 和其他人一样通过 Graph API 动态注册 Facebook 应用程序?

    我正在尝试创建一个抽奖应用程序 我正在尝试复制wildfire http wildfireapp com 但我无法像他们那样动态创建 Facebook 应用程序 我检查了他们正在使用图形 api 在前端显示 但图形 api 中没有可用的方法
  • 如何检索 MongoDB 中对象内的不同键

    我在 MongoDB 中有这个 id ObjectId 58fb35531eb5df245d5d434f name d1 html indexation Citroen 1 color 1 Marca 1 rojo 1 id ObjectI
  • 图表:带状线和曲线交点

    我在没有很多数据点的正弦曲线类型图中添加了一条水平带状线 有没有办法找到x坐标交点 您可以通过分析来解决它 即如果您的数据是从公式导出的 您可以使用数学来求解交集 或者你可以在以下方面的帮助下得到一个近似值GDI 正如您发现使用DataPo
  • UITableView中如何设置表头的高度?

    我已经浏览了有关 UITableView 类和委托参考的 Apple 文档 但找不到显式设置表头高度的方法 我使用以下委托设置表格单元格高度 CGFloat tableView UITableView tableView heightFor
  • 具有多个字段的 LINQ OrderBy

    我有一个列表 需要按两个字段排序 我尝试过在 LINQ 中使用 OrderBy 但这只允许我指定一个字段 我正在寻找要按第一个字段排序的列表 然后如果第一个字段中有任何重复项 则按第二个字段排序 例如 我希望结果看起来像这样 按姓氏然后名字
  • 每个 React 类方法的“函数缺少返回类型”

    我的 Typescript 项目中有一个有状态的 React 组件 我使用 ESLint 来检查它 typescript eslint parser and typescript eslint eslint plugin 我已启用该规则 t
  • setup.py/setup.cfg 安装所有附加功能

    我在 setup cfg 中寻找 继承 其他附加功能的可能性 如下所示 options extras require all
  • .Net 的 Prolog 编译器

    任何人都可以推荐一个用于 Net 的 Prolog 编译器吗 我在网上搜索到的那些似乎已经好几年没有更新了 Thanks Shiraz 在这篇文章中他们推荐P http homepages inf ed ac uk stg research
  • AdRequest.Builder 无法解析为类型

    我正在将 AdMob 合并到我的应用程序中 我已按照开发人员页面中的步骤进行操作 然而 AdRequest Builder 带有红色下划线 它表示 AdRequest 无法解析为类型 and AdRequest Builder 无法解析为类
  • 程序如何在内存中运行以及操作系统处理内存的方式

    我不清楚进程执行时的内存管理 在运行时 Here is a diagram 我不清楚图像中的以下内容 1 该图像所指的堆栈是什么 2 什么是内存映射段 它指的是文件映射 3 堆与进程有什么关系 堆是仅在进程中处理还是堆是由操作系统内核维护的