堆管理

2024-03-07

我知道有一个元数据存储在期间使用的辅助信息free(), realloc()当我们只提供指针时。

我对堆几乎没有疑问。

  • 堆栈是按进程分配的。毫无疑问,但对堆不确定。无论堆信息是全局维护的,还是每个进程都会有某种机制来保存有关为该特定进程分配的内存的信息。

  • 堆信息将如何维护?我猜是散列机制。我也用谷歌搜索并尝试过。他们中的大多数人将其解释为特定于实现的..就像那样。

堆和堆栈一样,是每个进程的,并且(几乎)纯粹是用户空间的东西。

堆管理器使用sbrk系统调用通知操作系统它打算增加所需的内存量。除了将一系列页面从“未知”更改为“现有、零、从未访问过”(这意味着实际上它们仍然不存在,但操作系统假装它们存在)之外,这几乎没有什么作用。当第一次访问页面时,它会出错,操作系统会从零池中提取零页面。
(它可能稍微复杂一些,因为如果从顶部释放了大量内存,堆管理器也可能会缩小数据段,但基本上就这么简单)。

这已经是操作系统所知道的有关堆的所有信息。其他一切,例如分割块、将释放的块放入列表或类似结构以及重用块都发生在堆管理器内部,堆管理器直接或间接(例如作为 glibc 的一部分)是程序的一部分。

堆管理器到底在做什么取决于实现,至少存在六种众所周知的不同 malloc 实现,它们以不同的方式工作。参见示例this one http://g.oswego.edu/dl/html/malloc.html or this one http://goog-perftools.sourceforge.net/doc/tcmalloc.html or this one http://www.hoard.org/.

堆栈以相同或相似的方式工作。某个内存范围最初是“保留”的,但实际上没有保留任何内容(即不创建页面)。一些页面被提交(即创建),最后一个页面要么被写保护,要么不存在,并且以特殊方式记住这一点。当堆栈增长以致最后一页被触及时,就会发生错误。然后从零池中提取一个新页面,前提是堆栈仍在其允许的大小范围内。

当进程终止时,对这些页面的所有引用都将被删除,并(假设它们不与仍保留引用的另一个进程共享)移交给低优先级后台任务,该任务将它们清零并将它们添加到“零池”。

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

堆管理 的相关文章

  • Linux 文本文件操作

    我有一个格式的文件 a href a href a href a href 我需要选择 之后但 之前的文本 并将其打印在行尾 添加后 例如 a href http www wowhead com search Su a a a a a
  • Gradle 1.3:build.gradle 不构建类

    这里有一个新问题 我有一个 build gradle 文件apply plugin java在其中 并与 java 项目 包关联 当我跑步时gradle build从命令行我得到 compileJava UP TO DATE process
  • R 未获取用户库

    我有一个带 R 3 6 0 的 Fedora 30 系统 用户库设置在Renviron就像这个 R LIBS USER R LIBS USER R x86 64 redhat linux gnu library 3 6 事实上 它出现在交互
  • Bash 脚本 - 迭代 find 的输出

    我有一个 bash 脚本 其中需要迭代 find 命令输出的每一行 但似乎我正在迭代 find 命令中的每个单词 以空格分隔 到目前为止我的脚本看起来像这样 folders find maxdepth 1 type d for i in f
  • 错误:NVIDIA-SMI 失败,因为无法与 NVIDIA 驱动程序通信

    NVIDIA SMI 抛出此错误 NVIDIA SMI 失败 因为无法与 NVIDIA 通信 司机 确保安装了最新的 NVIDIA 驱动程序并且 跑步 我清除了 NVIDIA 并按照提到的步骤重新安装了它here https askubun
  • perf stat中的cycles注释是什么意思

    8 014196 task clock 0 004 CPUs utilized 204 context switches 0 025 M sec 32 cpu migrations 0 004 M sec 0 page faults 0 0
  • 如何确保 numpy BLAS 库可用作动态加载库?

    The theano安装文档 http www deeplearning net software theano install html troubleshooting make sure you have a blas library指
  • 确保 config.h 包含一次

    我有一个库项目 正在使用 Linux 中的 autotools 套件移植到该项目 我对自动工具很陌生 本周 我已经了解了其操作的基础知识 我有一个关于如何保留内容的问题config h免遭重新定义 我惊讶地发现生成的config h文件也没
  • 为 Linux 安装 R 包时出错

    我试图在 R 3 3 上安装一个名为 rgeos 的包 但是当我输入 install packages rgeos 但它返回给我以下错误 其他包也会发生同样的情况 但不是所有包 gt installing source package rg
  • 无法仅在控制台中启动 androidstudio

    你好 我的问题是下一个 我下载了Android Studio如果我去 路径 android studio bin 我执行studio sh 我收到以下错误 No JDK found Please validate either STUDIO
  • 如何调用位于其他目录的Makefile?

    我正在尝试这样做 我想打电话给 make Makefile存在于其他目录中 abc可以使用位于不同目录中的 shell 脚本的路径 我该怎么做呢 由于 shell 脚本不允许我cd进入Makefile目录并执行make 我怎样才能编写she
  • numpy 未定义符号:PyFPE_jbuf

    我正在尝试使用一百万首歌曲数据集 为此我必须安装 python 表 numpy cython hdf5 numexpr 等 昨天我设法安装了我需要的所有内容 在使用 hdf5 遇到一些麻烦之后 我下载了预编译的二进制包并将它们保存在我的 b
  • gethostbyname() 或 getnameinfo() 如何在后台工作?

    How gethostbyname or getnameinfo 在后台工作 include
  • 如何在我的 AWS EC2 实例上安装特定字体?

    我有一个在 AWS EC2 Amazon Linux Elastic Beanstalk 实例上运行的 Python 应用程序 该实例需要某些特定字体才能生成输出 并且想知道如何在部署或实例启动过程中安装它们 我的代码在本地计算机 OS X
  • 从 Java 应用程序读取的文件是否会调用系统调用?

    我的理解是 请求文件系统路径 例如 aFile 的用户应用程序将调用文件系统并获取所请求文件的虚拟地址 然后应用程序将尝试以该地址作为参数 即作为 CPU 指令 进行读 写操作 执行读取命令时 内存管理单元会将该地址转换为物理地址 并查看页
  • Inotify linux 监视子目录

    是否可以以这种模式监视目录 storage data usernames Download gt storage data Download 我需要监视每个用户的下载文件夹中是否进行了更改 也许我需要创建所有路径的列表 将其放入数组中 并在
  • 从多线程程序中调用 system()

    我们正在开发一个用 C 编写的多线程内存消耗应用程序 我们必须执行大量的 shellscript linux 命令 并获取返回码 读完之后article http www linuxprogrammingblog com threads a
  • 如何在特定 systemd 服务重新启动时触发自定义脚本运行

    我想知道如何安排自定义脚本在重新启动服务时运行 我的用例是 每当重新启动 Tomcat 服务时 我都必须运行多个命令 我想知道是否有一种方法可以编写脚本并安排它在重新启动 Tomcat 服务时运行 我已将 tomcat 脚本设置为 syst
  • 为什么 Linux 对目录使用 getdents() 而不是 read()?

    我浏览 K R C 时注意到 为了读取目录中的条目 他们使用了 while read dp gt fd char dirbuf sizeof dirbuf sizeof dirbuf code Where dirbuf是系统特定的目录结构
  • 如何查找连接到 AF_INET 套接字的客户端的 UID?

    有什么方法或类似的东西ucred for AF UNIX如果是AF INET插座 TCP在我的例子中 找出连接到我的套接字的客户端的UID 还有 proc net tcp但它显示了UID of the creator插座的而不是连接的cli

随机推荐

  • Docker构建特定的本地git分支

    我是 docker 新手 想要容器化我的应用程序的特定 git 分支 如果我运行 docker build 并给出 dockerfile 的位置 则会构建一个图像 但默认情况下从本地 master 分支构建 我希望能够要构建另一个分支 请说
  • 将 node.js 服务器端代码移植到 HTML5 WebSockets

    注意 这不是关于同时使用 node js 和 HTML5 套接字 我也没有兴趣讨论我所描述的设置的优点 node js 在服务器上运行 并且由于它支持通过套接字连接作为客户 它可以充当 HTML5 JS 客户端和使用 TCP IP 的服务器
  • 为什么.NET中没有IDateTimeProvider而DateTime有Now getter?

    目前 我正在为执行日期时间特定验证的组件编写单元测试 我创造了IDateTimeProvider接口 用作DateTime UtcNow包装器和业务对象使用接口而不是DateTime直接地 看来 DateTime 有点过载 应该分为一个值和
  • 页内分析不起作用

    当尝试在 Firefox 中查看页内分析时 我收到以下消息 加载页内分析时出现问题 我们发现您的设置存在问题 这些可能会导致加载页内分析时出现问题 您的网站不会从 Google 加载 ga js 如果您在自己的服务器上托管 Google 跟
  • 在 NGS 数据中查找 CDR

    我有数百万个fasta格式的序列 想要提取CDR CDR1 CDR2和CDR3 我只选择了一个序列作为示例 并尝试提取CDR1 但无法提取CDR1 顺序 FYSHSAVTLDESGGGLQTPGGGLSLVCKASGFTFSSYGMMWVR
  • Pycharm 安装抱怨 OpenJDK

    我尝试在 Ubuntu 12 04 上安装 Pycharm 我有以下信息 user user Pobrane pycharm 2 5 2 bin sh pycharm sh OpenJDK Runtime Environment IcedT
  • 通过 SSL 的 REST WCF 服务

    我正在尝试通过 SSL 配置 REST WCF 服务 但我不断收到 找不到基地址 与端点的方案 https 匹配 与绑定 WebHttpBinding 注册基地址方案是 http 有人可以看一下我的配置文件吗 谢谢
  • 如何在 OpenSSL 中使用 AES-128-ECB Alg 生成带有 PEM 编码的 PKCS8 密钥

    我想知道如何使用 openssl cmd 生成以下密钥 AES 128 ECB BEGIN PRIVATE KEY Proc Type 4 ENCRYPTED DEK Info AES 128 ECB 379AB79E55059F9A ga
  • C++ Typedef 和运算符重载

    如果你定义一个类似的类型typedef int MY INT 并继续重载 MY INT 的加法运算符 例如 MY INT operator MY INT a MY INT b will MY INT a b a b 不同于 int A B
  • FirstOrDefault() 无法与 ?? 结合操作员

    据我所知 linq 方法FirstOrDefault 回报null如果记录集为空 为什么不能使用 针对函数的运算符 就像这样 Double d new Double FirstOrDefault 0 0 Update 我不想检查是否d is
  • Abs、sign 等在 F# 中是如何实现的

    我找到 abs 10 abs 10L 两者都有效 于是我想知道F 是如何实现的 并在源代码中进行了搜索 type AbsDynamicImplTable lt T gt let AbsDynamic x AbsDynamicImplTabl
  • 给定一个完全由字符串元组列表表示的线性顺序,将该顺序输出为字符串列表

    给定形式的项目对 a b where a b means a gt b 例如 best better best good better good 我想输出一个表单列表 best better good 由于某种原因 这非常困难 有什么想法吗
  • 如何使用node.js基于id(transectionid)组合两个集合?

    我有横切和购买集合 其中包含横切和购买详细信息 现在我想将其转换为单个集合 基于横断面 我们需要合并文档 以下是我的横断面收集数据 transectionid 1 transectionamount 2000 transectiondate
  • 如何从备份文件中检索数据库的逻辑文件名

    我正在研究如何的步骤使用 SQL 脚本 T SQL 恢复数据库备份 http blog sqlauthority com 2007 02 25 sql server restore database backup using sql scr
  • 如何确定 JNI 全局引用内存泄漏的原因?

    我正在使用 Tomcat 停止我的 Web 应用程序后仍然存在对类加载器的引用我的网络应用程序的实例 结果是大量内存 主要与静态数据相关 将不会被释放 迟早这会导致OutOfMemoryError 我拍了一张heap dump我意识到它是由
  • VLC录制rtsp流

    我在使用 VLC 播放器录制 rtsp 流时遇到问题 实际上我的方法在 MacOS X 中有效 但在 Windows 中无效 命令行 vlc vvv rtsp admin email protected cdn cgi l email pr
  • 如何使用 Powershell 枚举 IIS 网站并查找每个网站的应用程序池?

    我可以使用以下方式搜索网站 Get WmiObject Namespace root WebAdministration Class Site Authentication PacketPrivacy ComputerName server
  • 使用 CUDA 生成排列

    我正在阅读有关 CUDA 的内容 我尝试实现一个简单的代码来创建每个可能的排列array a b c d 但我不知道如何实现 CUDA 方式 因为我读到的所有示例都是这种形式a blockIdx x b blockIdx x c block
  • Xcode 无法使用 Apple ID 登录

    最近我想用Xcode归档我的App 然后Xcode说我必须再次输入我的Apple ID和密码 也许我的登录信息丢失了 我又尝试了一次 但总是失败 If I input a wrong password I get a correct res
  • 堆管理

    我知道有一个元数据存储在期间使用的辅助信息free realloc 当我们只提供指针时 我对堆几乎没有疑问 堆栈是按进程分配的 毫无疑问 但对堆不确定 无论堆信息是全局维护的 还是每个进程都会有某种机制来保存有关为该特定进程分配的内存的信息