linux的brk函数源码分析读书笔记

2023-10-31

       最近分析内存申请一系列关系,应用程序自己的内存池,malloc/tcmalloc/jemalloc对内存的管理,现在分析linux操作系统对内存申请的管理,即brk函数。

        系统调用sys_brk包括两个主要函数:

  •     do_munmap 用于内存的释放
  •     do_brk 用于内存的申请    

        首先,对新申请内存的地址进行调整,判断申请内存地址是否小于已有内存的边界(mm0->brk),如果是表示是释放内存,调用do_munmap函数,如果不是,表示申请内存,调用do_brk函数。

        do_munmap函数分析:

 

 

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

linux的brk函数源码分析读书笔记 的相关文章

  • 当尝试释放堆管理器分配的内存时会发生什么,而堆管理器分配的内存超出了要求的内存?

    这个问题是在一次采访中问我的 假设 char p malloc n 分配了 n 个以上的内存 即分配了 N 个字节的内存 并且使用 free p 来释放分配给 p 的内存 堆管理器可以执行这种错误的分配吗 现在会发生什么 是释放 n 个字节
  • 如何将 malloc 返回的指针视为多维数组?

    有没有办法告诉编译器我已经分配了大小为 N M 的内存 并且我想将此指针视为 N M 数组 换句话说 有没有办法写这样的东西 int arr N M int N M malloc N M sizeof int arr x y 123 我知道
  • 我可以要求内核填充(故障)一系列匿名页面吗?

    在Linux中 使用C 如果我通过以下方式请求大量内存malloc或类似的动态分配机制 很可能支持返回区域的大多数页面实际上不会映射到我的进程的地址空间 相反 每次我第一次访问其中一个分配的页面时都会发生页面错误 然后内核将映射到 匿名 页
  • 从c中的数组中删除偶数

    你好 我正在尝试大约 2 个小时来创建一个程序 该程序将从 c 中的动态分配数组 使用 malloc 中删除偶数 有人可以帮我提供一些提示或创建代码吗 附注这是我在这里的第一个主题 所以请随时给我一些关于如何正确发布问题的提示 假设您已经动
  • 为什么在释放指针后取消引用它时会得到不同的结果?

    我有一个关于 C 内存管理的问题 以及 Debian GNU Linux 下的 GCC 4 3 3 根据 K R 的 C 编程语言书籍 第 7 8 5 章 当我释放指针然后取消引用它时 会出现错误 但我有一些疑问 因为我注意到有时 正如我在
  • 跟踪 malloc 分配了多少内存

    在快速浏览了 SO 上的相关问题后 我推断没有函数可以检查 malloc 分配给指针的内存量 我正在尝试使用 C 中的简单 char 来复制一些 std string 基本功能 主要是动态大小 并且不想一直调用 realloc 我想我需要跟
  • 如果不断增加访问内存超过 malloc() 分配的大小,linux glibc 中会发生什么[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 似乎评论 答案只是停留在 C 标准描述上 让我们更深入地讨论具体的实现 我在其他讨论中看到以下代码 struct size t x char
  • C malloc valgrind 大小写入无效

    我曾经遇到过公平份额 malloc 无效写入 以及本网站上的许多示例 但我仍然无法指出导致某些写入的原因 这里我有一个用于图形的邻接矩阵 在分配时 我从 valgrind 获得无效写入 但整个程序中没有分段错误 我也得到无效的读取 但我认为
  • 对对齐的 malloc 实现的解释

    这不是作业 这纯粹是为了我自己的个人教育 我不知道如何实现对齐的 malloc 所以在网上查找并发现这个网站 https sites google com site ruslancray lab bookshelf interview ci
  • 从 void* 到 char** 的转换无效

    自从我搞乱 C 代码以来已经有一段时间了 在 Ubuntu 下使用 gcc 编译 C 代码时出现以下错误 我用来编译代码的命令是 如果这些错误是由于我使用的编译器造成的 请让我知道如何消除该错误 gcc o runnable mycode
  • 如何在c中创建一个n维数组

    我正在考虑编写一个函数 它接受 n 个参数并使用这些参数作为维度返回一个 n 维数组 现在我意识到一维和二维数组很容易用指针实现 对于二维数组 片段将类似于 标准方式 int x int temp x int malloc m sizeof
  • 为什么 C++ 需要对 malloc() 进行强制转换,而 C 不需要?

    我一直对此感到好奇 为什么在 C 中我必须转换返回值malloc但不是C语言 下面是 C 中有效的示例 int int ptr int malloc sizeof int 下面是 C 中的示例 该示例不起作用 无强制转换 int int p
  • git add 错误:“致命:malloc,内存不足”

    当我尝试执行 git add 时 出现错误 致命 malloc 内存不足 我想系统显然已经耗尽了内存 但是有没有办法解决这个问题 我还运行 Windows Server 2003 并使用 msysGit 编辑 经过更多搜索后 我认为这是 g
  • 如何从 .t​​xt 文件中读取已知数量的未知大小的字符串并将每一行存储在矩阵的一行中(在 C 中)?

    标题是不言自明的 我几乎可以肯定 最终结果不会是一个矩阵 因为每行都有不同数量的列 所以它更像是可变大小的数组的数组 按大小对片段进行排序 最大的在前 也很有趣 这是我到目前为止所尝试过的 int main char str MAXLEN
  • 为什么分配大块内存会失败,而重新分配小块内存却不会失败

    这段代码的结果是x指向一块大小为 100GB 的内存 include
  • C中的内存使用问题

    请帮忙 操作系统 Linux 其中 sleep 1000 中 此时 top 显示Linux任务 给我写了7 7 MEM使用 valgrind 未发现内存泄漏 我明白 写得正确 所有 malloc 结果都是 NULL 但是为什么这次 睡眠 我
  • 为什么 char 指针保存的数据比 C 中分配的内存更多?

    在使用 C 进行动态内存分配时 我在将内存大小分配给 char 指针时感到困惑 虽然我只给出 1 个字节作为限制 char 指针成功地接收尽可能长的输入 假定每个字母对应 1 个字节 我还尝试查找输入前后指针的大小 我怎样才能理解这里发生了
  • 64 位大型 malloc

    malloc 失败的原因是什么 尤其是在 64 位中 我的具体问题是尝试在 64 位系统上分配一大块 10GB RAM 该机器有 12GB RAM 和 32GB 交换空间 是的 malloc 是极端的 但是为什么它会成为一个问题呢 这是在带
  • 具有不同大小结构的结构数组的 malloc()

    如果每个结构都包含一个大小不同的字符串数组 那么如何正确地 malloc 一个结构数组 因此每个结构可能有不同的大小 并且不可能 realloc 结构体数量 sizeof 结构体名称 after malloc 初始大小 sizeof 结构名
  • C 中的指针、数组、字符串和 Malloc

    我目前正在学习 C 语言中的字符串 指针和数组 我尝试编写一个程序 其中数组保存三个指向字符串地址的指针 这一切似乎都有效 但程序的行为很奇怪 这是代码 char getUserDetails char host localhost cha

随机推荐