内存的分配与释放

原创 2015年07月09日 13:42:51

1.内存分配

在驱动中使用内存分配,这个函数不再有效。驱动中分配内存,最常用的是调用ExAllocatePoolWithTag。

下面的例子,是把一个字符串src拷贝到字符串dst。

//定义一个内存分配标志

#define MEM_TAG "MyTt"

//目标字符串,接下来它需要分配空间

UNICODE_STRING dst = {0};

//分配空间给目标字符串,根据源字符串的长度

dst.Buffer = 

(PWCHAR)ExAllocatePoolWithTag(NonpagePool, Src->Length,MEM_TAG);

if (dst.Buffer == NULL)

{

  //错误处理

status = STATUS_INSUFFICIENT_RESOURCEES;

......

}

dst.Length = dst.MaximumLength = src->Length;

status = RtlCopyUnicodeString(&dst, &src);

ASSERT(status == STATUS_SUCCESS);


ExAllocatePoolWithTag的第一个参数NonpagePool表明分配内存是锁定内存。

这些内存永远真实在于物理内存上,不会被分页交换到硬盘上去。第二个参数是长度。第三各参数是一个所谓的“内存分配标志”。


2.内存释放

分配的内存可以使用ExFreePool来释放,如果不释放,则永远泄露,并不像用户进程关闭后自动释放所有分配的空间.即使驱动程序动态卸载,也不能释放空间,唯一的办法是重启计算机。

ExFreePool(dst.Buffer);

dst.Buffer = NULL;

dst.Length = dst.MaximumLength  = 0;

ExFreePool不能用来释放一个栈空间的指针,否则系统立刻崩溃。像一下的代码:

UNICODE_STRING src = RTL_CONST_STRING(L"My souce string");

ExFreePool(src.Buffer);

会导致立刻蓝屏,所以请务必保持ExAllocatePoolWithTag和ExFreePool的成对关系。




内存分配、释放以及内存分配系统调用

在做C/C++编程的时候,最棘手处理的大概就是内存操作了。 前一段时间查看资料得知内存管理的算法大致有两种:内存分配算法、内存页面置换算法,对这些算法虽然可能不需要实现,但是需要了解其中的概念原理,以...
  • xygl2009
  • xygl2009
  • 2015年07月22日 22:23
  • 941

C语言系列(五)内存的分配与释放

转载请标明出处: http://blog.csdn.net/u011974987/article/details/52290724 本文出自:【Xuhao的CSDN博客】 首先我们来科普一下...
  • u011974987
  • u011974987
  • 2016年08月23日 14:41
  • 8953

操作系统~内存动态分配与释放

  • 2011年03月21日 09:38
  • 117KB
  • 下载

详解操作系统分配内存

计算机体系结构和内存层次 操作系统中内存的最小访问单位是 字节 ,也就是8bit。 通常我们所说的计算机系统是32位的总线,所谓的32位总线就是说一次读写可以从内存当中读或者写32位(也就...
  • qq_32635069
  • qq_32635069
  • 2017年07月08日 16:37
  • 1252

OpenCV 释放 vector 内存莫名崩溃的问题

当我想通过 swap 释放成员变量的 vector的内存时,总是Crash,断点进去Crash的位置也很诡异:Crash 位置 :还以为是内存没有对齐的问题,结果加了#pragma pack(4) /...
  • panda1234lee
  • panda1234lee
  • 2017年04月13日 15:35
  • 953

【OpenCV】有关内存释放的一些问题

OpenCV】有关内存释放的一些问题   (2014-01-10 16:18:05) 转载▼   分类: OpenCV 转载请注明出处:...
  • hugyxh
  • hugyxh
  • 2015年11月07日 21:03
  • 1452

(笔记)分配和释放虚拟内存

/* ************************************ *《精通Windows API》  * 示例代码 * virtual.c * 5.4.2  分配和释放可读可写的...
  • saca0003
  • saca0003
  • 2013年05月11日 20:03
  • 417

分配与释放内存

#include #include main() { int *base; int i,j; int cnt=0; int sum=0; printf("h...
  • weiyanghuadi
  • weiyanghuadi
  • 2013年05月19日 03:12
  • 371

【OpenCV】有关内存释放的一些问题

原文出处:http://blog.sina.com.cn/s/blog_67a7426a0101czyr.html 1、内存泄露 内存泄露是说没有释放已经不能使用的内存,这里一般指堆的内存才需...
  • m0_37644085
  • m0_37644085
  • 2017年11月23日 10:24
  • 136

A2W,W2A等转换函数,由于使用的比较平繁,所以程序内存一直上涨,导致崩溃

在写一个程序中使用了 atlconv.h 中的 A2W,W2A等转换函数,由于使用的比较平繁,所以程序内存一直上涨,导致崩溃。 最后发现是字符转换的时候会申请的内存,直接在程序中使用 WideC...
  • GZFStudy
  • GZFStudy
  • 2016年06月06日 10:24
  • 1334
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:内存的分配与释放
举报原因:
原因补充:

(最多只允许输入30个字)