内存管理(堆栈)

摘要:
PAGE_EXECUTE可执行PAGE_EXEC UTE_READ可读,PAGE可执行EXECUTE_READWRITE可读、可写,并且可以执行PAGE_ EXECUTE_WRITECOPY可读、可写入和可执行。它以写时读和写时复制模式共享PAGE,NOACCESS无法访问PAGE_READONLY_READWRITE可读、可写PAGE_WRITECOPYco
PAGE_EXECUTE      可执行
PAGE_EXECUTE_READ    可读,可执行
PAGE_EXECUTE_READWRITE 可读,可写,可执行
PAGE_EXECUTE_WRITECOPY 可读,可写,可执行,以Read-on-write和copy-on-write方式共享
PAGE_NOACCESS           不可访问
PAGE_READONLY           只读
PAGE_READWRITE          可读,可写
PAGE_WRITECOPY          copy-on-write保护机制
PAGE_GUARD              保护,如果访问则异常(不能单独使用)
PAGE_NOCACHE            不进行CPU缓存(不能单独使用)
PAGE_WRITECOMBINE       write-combined优化(不能单独使用)
堆管理API
HeapCreate   为进程创建一个堆,返回一个堆句柄
GetProcessHeap 获取当前进程中的一个堆
HeapAlloc   从指定堆上分配内存块
HeapReAlloc     重新分配内存,改变已经分配好的堆内存块大小
GetSystemInfo 获取系统信息
HeapSize     获取指定堆大小,以字节为单位返回堆大小信息
HeapFree   释放HeapAlloc和HeapReAlloc所分配的内存
HeapDestroy   销毁由HeapCreate创建的堆
全局和局部内存管理API函数
GlobalAlloc   在默认堆上分配指定属性的大小的内存
GlobalFree   释放由GlobalAlloc分配的内存
GlobalReAlloc 重新分配内存,改变已经分配好的内存块大小
GlobalLock   将GlobalAlloc及GlobalReAlloc分配属性为GMEM_MOVEABLE内存块设为固定
GlobalHandle 与GlobalLock相对
GlobalSize   获取内存大小
虚拟内存管理API函数
VirtualAlloc "保留""提交"内存页面,将"空闲的"内存页面变为"保留的""已经提交的",保留的改为已提交的
VirtualAllocEx 类似VirtualAlloc功能,不过可以为其他进程分配内存
VirtualFree   将内存状态从"已经提交的"变为"保留的"
VirtualFreeEx 释放VirtualAllocEx分配的内存,功能,使用方法和VirtualFree类似
VirtualProtect 改变指定虚拟内存分页的保护属性
内存操作与内存信息管理API函数
CopyMemory            复制内存,第一个参数为目的地址,第二个参数为源地址,第三个参数为复制数据大小
FillMemory            填充内存,将一段内存填充为同一个值
MoveMemory            功能和CopyMemory类似,不同的是源地址和目的地址可以相同
ZeroMemory            将指定内存区域清零
GlobalMemoryStatusEx   用于获取系统当前内存使用情况
IsBadCodePtr     判断调用进程是否拥有对指定地址内存的读操作权限
IsBadReadPtr     判断调用进程是否有对指定地址段内存的读操作权限
ISBadStringPtr     判断调用进程是否拥有对字符串指针的读取权限
IsBadWritePtr          判断调用进程是否拥有对指定地址段内存的写操作权限
WriteProcessMemory 对某进程地址写入数据
ReadProcessMmemory 读取某进程地址数据

免责声明:文章转载自《内存管理(堆栈)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[转]【C/C++】Linux下使用system()函数一定要谨慎Linux+Apache+MySQL+PHP5的安装与配置与phpBB2论坛的架设下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C#后台架构师成长之路-高阶知识体系核心

了解了这些东西,熟悉了运用基本都是高工级别的了,其他修修补补就行了。。。。 1、三种预定义特性:attributeUsage、Conditional、obsolete,允许创建自定义特性,派生自System.Attribute类 2、委托和事件 2.1、将方法作为方法的参数:委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递 2...

Linux 下 pushd,popd,cd- 用法

一,为何要使用这几个命令?    可能大家会有疑问,为何要使用这几个命令,   难道用cd不就可以切换目录了吗?   没错,使用cd就可以切换到需要访问的目录,   但是有时会是一个路径很长,层次很多的目录,进到此目录下后,这时我们不小心运行了 cd命令,   理所当然,我们回到了自己的home目录,这时如果想回去怎么办?   还有:因为工作的需要,我们需...

远程序桌面登录的.NET(C#)开发

远程序桌面登录的.NET开发,可以使用MSTSCLib.dll和MsTscAxWrapper.dll两个转换过的动态库,而无需使用WINDOWS自带的OCX,因为使用OCX开发可以会遇到其它问题。      主要代码: 代码 public AxMSTSCLib.AxMsRdpClient rdpClient;     rdpClient = new Ax...

Windows内存小结(有好多图,比较清楚)

以前写过一篇理解程序内存, 当时主要是针对用户态,下面再稍微深入一点: 我们以32位程序为例(不启用AWE), 总共4G虚拟空间,其中低2G属于用户态, 高2G属于操作系统内核, 每个程序都有自己的低2G用户空间, 高2G内核空间是所有程序共享的。高2G内核空间中, 属于同一Session的程序又共享相同的session空间: x86系统所有的内存以...

零拷贝

零拷贝(Zero-copy)技术指在计算机执行操作时,CPU 不需要先将数据从一个内存区域复制到另一个内存区域,从而可以减少上下文切换以及 CPU 的拷贝时间。它的作用是在数据报从网络设备到用户程序空间传递的过程中,减少数据拷贝次数,减少系统调用,实现 CPU 的零参与,彻底消除 CPU 在这方面的负载。实现零拷贝用到的最主要技术是 DMA 数据传输技术...

【C/C++多线程编程之五】pthread线程深入理解

多线程编程之pthread线程深入理解       Pthread是 POSIX threads 的简称,是POSIX的线程标准。           前几篇博客已经能给你初步的多线程概念。在进一步学习线程同步等多线程核心知识之前,须要对多线程深入的理解。非常多人忽略或者回避这部分内容,直接的问题是学习者无法把握多线程编程的内在原理,理解的层次太浅。...