内存管理
sunshineywz
这个作者很懒,什么都没留下…
展开
-
内存池的实现(二)
阅读目录(Content)1.APR内存池结构1.1 内存分配结点1.2 内存分配器1.3 内存池结点2.APR内存池的内存管理2.1 内存申请2.2 内存释放2.3 内存池结点管理的内存3.小结《内存池的实现(一)》中,介绍了使用内存池的原因,设计内存池应该考虑的问题,最后给出一个简单的内存池实现例子。使用上一篇文章中介绍的内存池实现方案,要在一定的限定条件下,下面我们来看更通用的内存池实现——Apache服务器的内存池实现。Apache服务器的开发人员将代码中可移植的部分整理出来,原创 2020-09-14 09:11:15 · 226 阅读 · 0 评论 -
内存池的实现(一)
阅读目录(Content)1.引言2.内存池设计3.内存池实现方案一4.内存跟踪策略5.内存申请和释放策略5.1 申请5.2 释放6.对方案一的分析1.引言C/C++下内存管理是让几乎每一个程序员头疼的问题,分配足够的内存、追踪内存的分配、在不需要的时候释放内存——这个任务相当复杂。而直接使用系统调用malloc/free、new/delete进行内存分配和释放,有以下弊端:A.调用malloc/new,系统需要根据“最先匹配”、“最优匹配”或其他算法在内存空闲块表中查找一块空闲内存,原创 2020-09-14 09:08:37 · 343 阅读 · 0 评论 -
聊聊运维应该了解的一些内核知识
二、进程先来聊聊Linux内核开发,内核开发和普通应用开发有两个地方不一样:自己要管理内存,普通应用跑在内核之上,内核可以帮你管理内存,但是你自己就是内核,你必须自己做好内核管理,要不很容易就内核溢出了。没有库文件,普通应用程序有很多库文件可以调用,内核开发则没有,内核开发就是标准的C。由此看见,做内核开发还是要对内核有深刻的理解才可以,请注意,这里的内核开发指的是内核核心功能的开发。我们再来看看进程,进程简单的讲,就是运行中的程序,我个人理解,进程是一种生命形式,就像一个人的生命,从呱呱坠地开始原创 2020-06-13 09:57:31 · 263 阅读 · 1 评论 -
修改高端内存占比
3:1的话,ARM默认只能768M低端内存1G内核,低端内存占用786M. 剩下高端内存只有268 M. 高端内存中分三部分, vmalloc区域(240M),fixmap(3072k),vector(4k)vmalloc和fixmap的起始地址,arm硬编码的一定不能修改vmalloc中间的8M gap如果你需要的内存不多,可以使用fixmap区间,分配的时候如下操作alloc_pages一次最大默认情况,不能超过128k...原创 2020-06-12 10:03:56 · 196 阅读 · 0 评论 -
内存管理
本节思考:在系统启动时,ARM Linux内核如何知道系统中有多大的内存空间?在32bit Linux内核中,用户空间和内核空间的比例通常是3:1,可以修改成2:2吗?物理内存页面如何添加到伙伴系统中,是一页一页添加,还是以2的几次幂来加入呢?在内存管理的上下文中, 初始化(initialization)可以有多种含义.在许多CPU上,必须显式设置适用于Linux内核的内存模型.在x86_32上需要切换到保护模式, 然后内核才能检测到可用内存和寄存器.在初始化过程中, 还必须建立内存管理的数据结构原创 2020-06-13 09:27:57 · 378 阅读 · 0 评论 -
Linux内核内存管理
内存地址Memory ZoneLinux使用虚拟内存技术,所以在应用层所能看到的、访问的都是虚拟地址。对于32位系统来说(本文涉及的都是32位系统),每一个进程可以寻址的地址空间都是4G,无论物理内存有多大。应用开发者其实是可以不用关心内存空间的划分,仅仅使用封装后的接口就可以完成开发。但在工作中,如果对地址空间没有基本的了解,在程序设计和解决问题时可能会引起方向性错误。这里对地址空间进行简单介绍,下图时网上常见的x86架构的内存区域划分。物理内存被分为三个区域:ZONE_DMA,ZONE原创 2020-06-13 09:26:06 · 596 阅读 · 0 评论