抽象的操作系统(五) --- 内存
来源:互联网 发布:金融大数据分析 编辑:程序博客网 时间:2024/06/05 13:29
内存管理,尤其是对于C/C++语言来说, 非常重要。说到内存,大家想到的往往是内存泄露,越界操作等,这些也是常见的导致程序出现问题的原因。但是,内存的事儿,远远不止这些,如何更好的管理内存,使用内存,多进程的时候内存怎么用,都需要好好的探讨。
1). 内存的分类。从硬件的角度来讲,有寄存器,一级(二级)缓存,主存,辅存,是一个层次的结构,越靠前的内存速度越快,价格却越昂贵。从软件的角度来讲,内存是可以访问的一个存储空间。只是有的速度快点但小一点,有的慢点但是大一些,至多也就知道一个寄存器变量(C有register关键字)罢了。更多的时候,编译程序的时候除了堆上的内存分配是程序自身操作的, 编辑器帮做了大部分情况下的内存管理。
2). 内存管理算法。比较熟知的有两个算法,最佳适应算法与最先适应,它们各自有各自的特点。比较复杂的应用一般都有自己的内存管理,比较突出的好处是可以更快的定位内存问题,以及能够提高内存分配释放的性能。有些平台本身提供内存回收功能,在这种平台上做开发,在遇到一些特别的内存问题的时候,需要基于它的机制原理来排查问题。
1). 内存的分类。从硬件的角度来讲,有寄存器,一级(二级)缓存,主存,辅存,是一个层次的结构,越靠前的内存速度越快,价格却越昂贵。从软件的角度来讲,内存是可以访问的一个存储空间。只是有的速度快点但小一点,有的慢点但是大一些,至多也就知道一个寄存器变量(C有register关键字)罢了。更多的时候,编译程序的时候除了堆上的内存分配是程序自身操作的, 编辑器帮做了大部分情况下的内存管理。
2). 内存管理算法。比较熟知的有两个算法,最佳适应算法与最先适应,它们各自有各自的特点。比较复杂的应用一般都有自己的内存管理,比较突出的好处是可以更快的定位内存问题,以及能够提高内存分配释放的性能。有些平台本身提供内存回收功能,在这种平台上做开发,在遇到一些特别的内存问题的时候,需要基于它的机制原理来排查问题。
3). 内存泄露与越界操作。内存泄露是指Malloc的内存使用完毕后没有Free导致的一种现象,最终会导致内存不足。防止内存泄露的关键原则是谁申请谁释放。越界操作是指修改了不该被修改的内存数据,它会产生莫名其妙的错误,很容易引起程序崩溃,野指针与边界操作是最经常引起越界操作的情况,要时刻注意。
4). 内存访问。不知道大家是否遇到过这样的问题,INT32的整数被安排在了奇数地址,读取的时候出现了问题。这是为什么,这个跟CPU的位数与读取数据的方式有关。一般要字节对齐,也许大家听说过结构体的字节对齐,其实对于多字节的基本数据类型来说,也要注意地址的安排。
在抽象操作系统这个话题下,讲解的内存相关的知识比较有限。以后的话题中,会详细讲解编译器相关,复合数据类型相关的知识。
- 抽象的操作系统(五) --- 内存
- (五)OSAL--操作系统抽象层 初始化流程分析
- 抽象的操作系统(一) --- 前言
- 抽象的操作系统(二) --- GDI
- 抽象的操作系统(四) --- 文件
- 抽象的操作系统(六) --- 网络
- 抽象的操作系统(七) --- 程序
- 抽象的操作系统(八) --- 进程
- 抽象的操作系统(九) --- 硬件系统
- 通过Linux理解操作系统(五):内存管理(中)
- 之五:物理内存管理中的抽象
- 操作系统的三个抽象概念
- 操作系统(五)
- 操作系统学习(五)
- 抽象的操作系统(十) --- 中间件(完)
- 对S3C2440裸板程序设计(无操作系统)的抽象
- 抽象的操作系统(三) --- 事件及处理
- 操作系统的内存管理(概念知识)
- 站长手记(2012.12.14号-2012.12.23号)
- android in practice_Using a Service for caching data(portfolio project)
- Android 游戏框架
- Unity3D AR技术 vuforia SDK
- 分飞
- 抽象的操作系统(五) --- 内存
- js 制作雪花
- 程序员要知道的12种玩转大数据工具
- 解决广播风暴的方法:storm-control命令
- XSL for-each 总结
- MySQL之back_log
- 12月26日,唐攀网络直播讲解《Android手机底层软硬件结合开发技术》
- Linux进程状态
- Sql-Server2005 模拟lpad函数