Win32的虚拟内存分配函数

VMM物理内存、虚拟内存管理,偷页算法 复杂度3/5 机密度3/5 先总结一下上文。AIX VMM设计了独特的缓存文件数据管理模式,既将缓存的文件数据与对其它类型虚拟内存(例如,进程数据、进程堆栈等等)的管理集成到一起,文件数据缓存也通过页方式管理,如同进程的虚拟内存一样。AIX根据实际访问需要将页映射到物理内存: 如果应用程序访问/引用(reference,read or write)某个页面,而该页面并没有映射到实际内存中(不在PFT),那么系统将产生一个page fault缺页中断。为了解决缺页,AIX 内核会将所引用的页面加载到实际物理内 阅读详情
  1. Win32的虚拟内存分配函数

虚拟内存API是其他API的基础。虚拟内存API以页为最小分配单位,X86上页长度为4KB,可以用GetSystemInfo函数提取页长度。虚拟内存分配函数包括以下函数:

  • LPVOID VirtualAlloc(LPVOID lpvAddress,

DWORD cbSize,

DWORD fdwAllocationType,

DWORD fdwProtect);

该函数用来分配一定范围的虚拟页。参数1指定起始地址;参数2指定分配内存的长度;参数3指定分配方式,取值MEM_COMMINT或者MEM_RESERVE;参数4指定控制访问本次分配的内存的标识,取值为PAGE_READONLY、PAGE_READWRITE或者PAGE_NOACCESS。

  • LPVOID VirtualAllocEx(HANDLE process,

LPVOID lpvAddress,

DWORD cbSize,

DWORD fdwAllocationType,

DWORD fdwProtect);

该函数功能类似于VirtualAlloc,但是允许指定进程process。VirtaulFree、VirtualProtect、VirtualQuery都有对应的扩展函数。

  • BOOL VirtualFree(LPVOID lpvAddress,

DWORD dwSize,

DWORD dwFreeType);

该函数用来回收或者释放分配的虚拟内存。参数1指定希望回收或者释放内存的基地址;如果是回收,参数2可以指向虚拟地址范围内的任何地方,如果是释放,参数2必须是VirtualAlloc返回的地址;参数3指定是否释放或者回收内存,取值为MEM_DECOMMINT或者MEM_RELEASE。

  • BOOL VirtualProtect(LPVOID lpvAddress,

DWORD cbSize,

DWORD fdwNewProtect,

PDWORD pfdwOldProtect);

该函数用来把已经分配的页改变成保护页。参数1指定分配页的基地址;参数2指定保护页的长度;参数3指定页的保护属性,取值PAGE_READ、PAGE_WRITE、PAGE_READWRITE等等;参数4用来返回原来的保护属性。

VMM实践:当虚拟化遇到虚拟机 文章目录1. 复现蓝屏:2. 哪里触发了double fault:3 .如何兼容:4 要注意的问题。 N年前些的老文,转到优快云博客 2014年开始,组内做了个基于VT虚拟化的游戏安全模块,当时购买了bluepill的代码的使用权,在它基础上做二次开发,bluepill因为只是个实验产品,所以只开发了最简单的功能,很多扩展功能都没有做,其中就包括和VMware,VirtualBox之类虚拟机的兼... 阅读详情

相关推荐

项目管理——14规划绩效域论文套路

规划绩效域论文套路

Flee Elf 1153

操作系统内存管理实践:从物理页帧到kmalloc的完整实现

内存管理是操作系统的核心子系统,它负责将有限的物理内存高效、安全地分配给多个进程使用。其基本原理是通过虚拟内存机制,为每个进程提供独立的地址空间,再通过页表将虚拟地址映射到物理地址。这一技术不仅实现了内存隔离与保护,还通过按需分页、写时复制等机制提升了内存利用率。在工程实践中,内存管理器通常采用分层设计:底层物理内存管理器(PMM)以页帧为单位管理物理内存;中间的虚拟内存管理器(VMM)负责页表映射与地址空间管理;顶层的堆分配器(如kmalloc/kfree)则处理内核中小块、不定长的内存请求。这种分层架构

weixin_33562004的博客 178

AquaCrop-OSPy学习笔记02:模型输入设置

AquaCrop-OSPy的输入设置

EWBA_GIS_RS_ER的博客 3697

minos 1.2 内存虚拟化——guest

本文讲述 SELinux 保护安全的基本原理Rand_cs该项目来自乐敏大佬:https://github.com/minosproject/minos项目来自乐敏大佬:https://github.com/minosproject/minos本文继续讲述 minos 中的内存虚拟化中关于 guest 的部分,主要弄清楚一个问题,minos 如何管理 guest vm 的内存。

weixin_46645613的博客 666

MATLAB锂离子电池伪二维(P2D)模型实现

锂离子电池伪二维(P2D)模型的MATLAB实现。该模型基于Newman等人提出的经典电化学模型,考虑了固液相扩散、电荷守恒和电化学反应动力学。

hie98894的博客 1932

ANSYS 有限元分析 接触分析

目 录一、前沿二、接触单元类三、接触单元关键选项3.1 CONTA174 KeyOption3.2 TARGE170 KeyOption四、接触分析标准步骤4.1 定义实常数4.2 定义接触和目标单元4.3 创建接触和目标单元五、接触分析实例5.1 MPC5.2 标准接触六、尾声七、参考文献 阿阳的 ANSYS 使用指南,本文仅用于个人学习,除此之外,无其他任何用途。 ANSYS 有限元分析 概述 ANSYS 有限元分析 坐标系/工作平面 ANSYS 有限元分析 几何建模 ANSY

Hulunbuir 4万+

aborts

1.aborts 介绍 该命令会显示系统当前内存访问异常、 内存分配错误、 分配物理页错误和页面映射错误次数。 2.命令参数 aborts没有命令参数,执行效果如下: [root@sylixos:/root]# aborts vmm abort statistics infomation show >> vmm abort (memory access error) counter : 0 vmm page fail (alloc success) counter : 0 vmm alloc

豆包不黏 400

避坑指南:Allegro 17.2更新封装时遇到的5个典型问题及解决方案(含Symbol报错处理)

本文深度解析Allegro 17.2封装更新过程中的核心机制与常见陷阱。针对“Update Symbols”功能失效、焊盘不匹配、DRC报错、图形层叠错误等5大典型问题,提供从原理分析到实战解决方案的完整指南,帮助用户实现从“更新失败”到“丝滑替换”的平稳过渡。

tgb34567890的博客 1040

C++内存分配方式 与 Windows内存分配方式

Windows内存分配方式 Win32的堆分配函数 每一个进程都可以使用堆分配函数创建一个私有的堆──调用进程地址空间的一个或者多个页面。DLL创建的私有堆必定在调用DLL的进程的地址空间内,只能被调用进程访问。 HeapCreate用来创建堆;HeapAlloc用来从堆中分配一定数量的空间,HeapAlloc分配的内存是不能移动的;HeapSize可以确定从堆中分配的空间的大小;Hea

firefly_2002的专栏 1755

CloudCompare 二次开发:插件中的 PCL 环境配置与编程

在进行 CloudCompare 的二次开发过程中,我们常常需要使用点云库(Point Cloud Library,简称 PCL)来处理和分析点云数据。在 CloudCompare 的界面中,选中一个点云对象,然后点击菜单栏中的 “插件” -> “MyPluginAction”。插件将对选中的点云对象进行体素滤波处理,并更新显示结果。下面我们将展示一个简单的插件编程示例,该示例使用 PCL 对输入的点云数据进行体素滤波处理。方法进行体素滤波处理,并将结果点云赋值给选中的点云对象。文件并点击 “打开”。

2301_79331387的博客 283

STM32电机PID速度控制

2.3 STM32电机PID速度控制 之前的文章,完成了直流减速电机的PWM控制、电机测速。本篇文章,将实现电机的速度闭环控制。 在公众号:小白学移动机器人,发送:速度PID,即可获得本篇文章的STM32工程文件以及相关资料。 2.3.1 解决的问题 解决带编码器直流电机的速度闭环问题。 2.3.2 PID理论 将偏差的比例、积分、微分,通过线性组合构成控制量,用控制量对被控对象进行控制,这样的控制器称为PID控制器。在连续空间中,我们通常探讨模拟PID的控制原理,如图所示: 我们这里用电机速度控制为例,

「小白学移动机器人」一个专注分享移动机器人相关知识的公众号! 6万+

内存分配和调试机制

 内存分配方式和调试机制 M内存分配 内存分配函数 MFCWin32或者C语言的内存分配API,有四种内存分配API可供使用。Win32的堆分配函数 每一个进程都可以使用堆分配函数创建一个私有的堆──调用进程地址空间的一个或者多个页面。DLL创建的私有堆必定在调用DLL的进程的地址空间内,只能被调用进程访问。HeapCreate用来创建堆;HeapAlloc用来从堆中分配一定数量的空间,HeapA

appleboyecho的专栏 664

淘宝母婴用品数据挖掘及可视化分析研究

1. 背景介绍 在当今的电子商务时代,母婴用品市场已经成为了各大电商平台的一片蓝海。淘宝作为中国最大的电子商务平台,其上的母婴用品交易数据自然引人关注。理解这些数据,可以帮助商家更好地制定营销策略,也可以帮助消费者更好地选择产品。因此,本文将对淘宝母婴用品的数据进行深入的挖掘和分析。 1.1 电子商务的

AI天才研究院 1258

Malloc和VirtualAlloc

内存分配方式和调试机制  M内存分配  内存分配函数  MFCWin32或者C语言的内存分配API,有四种内存分配API可供使用。 Win32的堆分配函数  每一个进程都可以使用堆分配函数创建一个私有的堆──调用进程地址空间的一个或者多个页面。DLL创建的私有堆必定在调用DLL的进程的地址空间内,只能被调用进程访问。 HeapCreate用来创建堆;

Sayesan的专栏 3578

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

windows 内存分配方式

Win32的堆分配函数 每一个进程都可以使用堆分配函数创建一个私有的堆──调用进程地址空间的一个或者多个页面。DLL创建的私有堆必定在调用DLL的进程的地址空间内,只能被调用进程访问。 HeapCreate用来创建堆;HeapAlloc用来从堆中分配一定数量的空间,HeapAlloc分配的内存是不能移动的;HeapSize可以确定从堆中分配的空间的大小;HeapFree用来释放从堆中分配的空间

痞子龙3D编程 1651

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

MFC教程(10)内存分配方式和调试机制收藏

  MFC教程(10)内存分配方式和调试机制收藏 新一篇: 搬家好累 | 旧一篇: 江湖MM升级了 function StorePage(){d=document;t=d.selection?(d.selection.type!=None?d.selection.createRange().text:):(d.getSelection?d.getSelection(

skyremember的专栏 845

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

内存分配问题与调试机制

 : 内存分配函数 MFCWin32或者C语言的内存分配API,有四种内存分配API可供使用。   Win32的堆分配函数   每一个进程都可以使用堆分配函数创建一个私有的堆──调用进程地址空间的一个或者多个页面。DLL创建的私有堆必定在调用DLL的进程的地址空间内,只能被调用进程访问。 HeapCreate用来创建堆;HeapAlloc用来从堆中分配一定数量

cslie的专栏 677

WIN32内存管理和文件操作

在WIN32中,进程可以使用的整个地址空间就是应该堆。而堆又分为默认堆和私有堆也叫动态堆,一个进程只有一个默认堆,但是可以又多个私有堆,私有堆位于默认堆中。 标准内存管理函数总是在默认堆中分配和释放内存。 内存映射文件函数相对不同,他是为了文件操作方便而设立的,当堆文件进行操作的时候,先打开文件,然后将文件直接映射到进程的地址空间中,然后我们就可以通过指针像访问内存一样访问文件了。 下面就来...

weixin_43575859的博客 522

内存分配方式和调试机制

内存分配方式和调试机制   M内存分配   内存分配函数   MFCWin32或者C语言的内存

841

如何访问一个进程的内存空间

           如何访问一个进程的内存空间    在WIN32中,每个应用程序都可“看见”4GB的线性地址空间,其中最开始的4MB和最后的2GB由操作系统保留,剩下不足2GB的空间用于应用程序私有空间。具体分配如下:0xFFFFFFFF-0xC0000000的1GB用于VxD、存储器管理和文件系统;0xBFFFFFFF-0x80000000的1GB用于共享的WIN32 DLL、存储器映射文件

ypyRock的专栏 3084

Win32 内存管理

<br /> <br /> <br />摘自《C++应用程序性能优化》<br />在Win32平台下,可以通过如下5组函数来使用内存(申请和释放操作等)<br />1. 传统的CRT函数(malloc/free系列),因为这组函数的平台无关性,如果程序会被移植到其它非Windows平台,则这组函数是首选。<br />2. global heap/local heap函数(GlobalAlloc/LocalAlloc系列),这组函数是为了向后兼容而保留的。在Windows 3.1平台下, global hea

专心-超越 2147

win32练习 - 虚拟地址映射

#include "stdafx.h" #include #include "windows.h"  using namespace std; VOID *pAddress=NULL;   TCHAR path[512]={0};   MEMORY_BASIC_INFORMATION t;   int _tmain(int argc, _TCHAR* arg

AlickXc的专栏 634

《Windows核心编程》---获得内存的当前状态のGlobalMemoryStatusEx

Win32系统中,一个进程可寻址的地址空间是4GB,用户可使用的地址空间是大概是2GB,但这不是说用户可以申请2GB的内存,因为这2GB只是可以使用的“地址”空间,而不是可以使用的“内存”空间,可分配内存的大小还受制于物理内存和磁盘交换文件的大小。因为物理内存和磁盘交换文件是供整个系统和所有用户程序使用的,所有系统内核、当前执行的所用用户程序的代码、数据,以及分配的内存总量并不能超过物理内存和磁盘交换文件的总和。当设计一个可能需要申请大量内存的程序时,我们就需要预先得知系统的配置情况,这时可以使用Globa

ASCE1885 3408

windows 内存管理

3、Windows 下内存分配的实现: LibC标准库的Malloc/Free函数提供了Windows 的动态管理,即它是Windows的内存管理器,Win32下OS本身也提供了内存管理器。在Win32下实现动态内存分配有...

cjm49105的博客 200
上一篇: WinNT/Win2000/WinXP中的远线程技术之一
下一篇: 用Visual C++实现远程线程嵌入技术
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值