驱动编程:内存管理基本函数

1)  内存间复制(非重叠)

应用:比如将需要显示的内容,从缓冲区复制到内存先看等

VOID
RtlCopyMemory
(

IN VOID UNALLGNED* Destination,

IN CONST VOID UNALLGNED
*Source,

IN SIZE_T
Length);//表示要复制的内存长度,单位是字节

注:RtlCopyBytes类似

2)  内存间复制(可重叠)

           B           C            D

如果将A到C段的内存,复制到B到D段,就会出现内存重叠的现象了

注:如果程序员能够确保内存没有重叠,请使用 RtlCopyMemory

如果不能保证内存是否重叠,则使用
RtlMoveMemory

VOID
RtlMoveMemory
(

IN VOID
UNALLGNED *Destination,

IN
CONST VOID UNALLGNED *Source,

IN
SIZE_T Length); //表示要复制的内存长度,单位是字节

3)  内存的填充

对某段内存区域用固定的字节填充

VOID
RtlFillMemory
(

IN VOID
UNALLGNED *Destination,

IN
SIZE_T length,//长度

IN
UCHAR Fill);//需要填充的字节

注:这个函数的参数后两个与memset相反

对某段内存填0

VOID
RtlZeroMemory
(

IN VOID
UNALLGNED *Destination,

IN
SIZE_T Length

)

注:RtlZeroBytes与之类似

4)  内存比较

ULONG
RtlEqualMemory
(

CONST
VOID *Sources1,

CONST
VOID *Sources2,

SIZE_T
Length//比较的长度,单位为字节

)

注:两段内存一致的情况下返回非0,不一致的情况下返回0

时间: 2024-09-30 21:21:27

驱动编程:内存管理基本函数的相关文章

iOS 5编程 内存管理 ARC技术概述

Automatic Reference Counting (ARC) 是一个编译期的技术,利用此技术可以简化Objective-C编程在内存管理方面的工作量. 这里我把此技术翻译为自动内存计数器管理技术,下图是使用和不使用此技术的Objective-C代码的区别. ARC技术是随着XCode4.2一起发布的,在缺省工程模板中,你可以指定你的工程是否支持ARC技术,如果你不指定工程支持ARC技术,在代码中你必须使用管理内存的代码来管理内存. 概述 自动计数(ARC)是一个编译期间工作的能够帮你管理

自己学驱动14——内存管理单元MMU(二)

1.内存的访问权限检查 内存的访问权限检查是MMU的主要功能之一,简单地说,它就是决定一块内存是否允许读.是否允许写.这由CP15寄存器C3(域访问控制).描述符的域(Domain).CP15寄存器C1的R/S/A位.描述符的AP位等联合作用. CP15寄存器C1中的A位表示是否对地址进行对齐检查,所谓对齐检查就是访问字时地址是否为4字节对齐,访问半字时地址是否2字节对齐,如果地址不对齐则产生"Alignment fault"异常.无论MMU是否被开启,都可以进行对齐检查.CPU读取指

自己学驱动13——内存管理单元MMU(虚拟地址和物理地址)

1.MMU简介 MMU负责完成虚拟地址到物理地址的映射,并提供硬件机制的内存访问权限检查.现代的多用户多进程操作系统通过MMU使得各个用户进程都拥有自己独立的地址空间:地址映射功能使得各个进程拥有"看起来"一样的地址空间,而内存访问权限的检查可以保护每个进程所使用的内存不会被其他进程所破坏.MMU增加了底层的复杂性,但是为上层程序开发提供了极大的方便. 2.虚拟地址与物理地址 虚拟地址最终需要转换为物理地址才能读写实际的数据,这通过将虚拟地址空间.物理地址空间划分为同样大小的一块块空间

操作系统之内存管理1

1. 2.内存管理需要达到的目的? 1)地址保护:多道程序之间互不干扰,一个进程不能随便访问另外一个进程的地址空间. 2)地址独立:程序发出的地址与具体机器的物理主存地址是独立的. 3.为什么提出了虚拟内存? 在计算机中,一个程序要运行,必须加载到物理主存中,但是物理主存的容量是非常有限的,因此我们要把一个程序全部加载到主存,我们的每一个程序大小就要限制.另外,即使我们编写的每一个程序的大小都小于物理主存的容量,但主存能够存放的程序数量也是有限的.这将大大限制多道编程的发展,所以我们发明了虚拟内

Objective-C高级编程:iOS多线程及内存管理(第一章翻译)

写在翻译之前:当初看到这本书的时候,感觉深入浅出讲得比较到位,但是在市面上看到的翻译版本翻译的却没有原著的精髓和味道.所以产生了自己将其翻译一下给初学者一些便利的想法.所以才有了这个系列的第一章的翻译.目前剩余的部分依然在翻译过程中,估计不久之后就可以陆续地发出了. 因为本人的水平或者用词问题,本翻译难免有不周详或不正确之处.如果有人看到还望指出,我一定会尽力地修改那些不正确的部分,让更多的人可以看到更优质的资料. Chapter 1 Life before Automatic Referenc

YJX_Driver_033_驱动中的内存管理

1. 驱动中的内存管理 A. 物理内存 B. 虚拟内存 C. Ring0地址和Ring3地址 D. 驱动程序和进程的关系 E. 分页和非分页内存 F. 分配内核内存 [120]了解两个概念:物理内存  虚拟内存 [140]以下概念针对 32位Windows操作系统(32位及以上的CPU)(32位 / 64位 CPU) [210]64位下的这些概念 略有区别 [240] “ A.物理内存:(Physical Memory Address) 目前主流的操作系统还是32位的XP,而32位的系统提供的寻

如何养成良好的 C++ 编程习惯(一)—— 内存管理

开篇导读 “养成良好的编程习惯”其实是相当综合的一个命题,可以从多个角度.维度和层次进行论述和评判.如代码的风格.效率和可读性:模块设计的灵活性.可扩展性和耦合度等等.要试图把所有方面都阐述清楚必须花很多的精力,而且也不一定能阐述得全面.因此,本系列文章以软件开发的基础问题为切入点,阐述程序设计和代码编写方面的细节问题,以点带面,旨在激发大家的思考与总结,希望能为大家带来实际的帮助.     虽然本系列文章定位为科普读物,但本座相信它们不但适合新手们学习借鉴,同时也能引发老鸟们的反思与共鸣.欢迎

[Windows驱动开发](四)内存管理

一.内存管理概念 1. 物理内存概念(Physical Memory Address) PC上有三条总线,分别是数据总线.地址总线和控制总线.32位CPU的寻址能力为4GB(2的32次方)个字节.用户最多可以使用4GB的真实物理内存.PC中很多设备都提供了自己的设备内存.这部分内存会映射到PC的物理内存上,也就是读写这段物理地址,其实读写的是设备内存地址,而不是物理内存地址. 2. 虚拟内存概念 虽然可以寻址4GB的内存,但是PC中往往没有如此多的真实物理内存.操作系统和硬件(主要是CPU中的内

内存管理单元编程实例【转】

转自:http://blog.chinaunix.net/uid-29091195-id-4020919.html 一.MMU初步了解    概念:内存管理单元(memory management unit),简称MMU    主要作用:负责虚拟地址到物理地址之间的转换             提供硬件机制的内存访问权限检查        发展由来:由于程序的大小逐步发展到大于内存的大小这一问题的出现    导致了虚拟存储器的产生,虚拟存储器的基本思想是:数据.堆栈的总    大小可以超越物理存