内存

技术内存 内存一、物理内存和虚拟内存
1、虚拟内存每个程序都有4G虚拟内存,相当于空头支票
只有真正要用的时候,才会在物理内存中给你分配一块物理内存
4kb页式管理,一页是4kb大小(物理页)2、虚拟内

内存储器

一、物理内存和虚拟内存

1、虚拟内存

每个程序都有4G虚拟内存,相当于一张空头支票。

只有真正需要的时候,才会在物理内存中分配给你一块物理内存。

4kb页面管理,一个页面是4kb(物理页面)

2、虚拟内存地址划分

3、物理内存

记忆棒的大小(不一定100%能识别所有大小,大概)虚拟内存(硬盘)

32位系统可以识别64G的最大物理内存,但由于操作系统的限制,比如XP,只能识别4G(Windows 2003服务器版本可以识别4G以上)

二、私有内存申请和释放

1、申请

#包含' stdafx.h '

int main(int argc,char* arvc[])

{

LPVOID p=VirtualAlloc(

空,//要分配的内存区域的地址(通常为空)

1000*2,//分配物理页面的大小(除以物理页面的整数倍,十进制4096,十六进制1000)

MEM_COMMIT,//分配类型(MEM_RESERVE,占用虚拟地址,不需要物理内存,mem _ commit,占用虚拟地址,也需要使用物理页面)

PAGE_READWRITE //该内存的初始保护属性(读和写)

);

返回;

}

2、释放

#包含' stdafx.h '

int main(int argc,char* arvc[])

{

LPVOID p=VirtualAlloc(

空,//要分配的内存区域的地址(通常为空)

1000*2,//分配物理页面的大小(除以物理页面的整数倍,十进制4096,十六进制1000)

MEM_COMMIT,//分配类型(MEM_RESERVE,占用虚拟地址,不需要物理内存,mem _ commit,占用虚拟地址,也需要使用物理页面)

PAGE_READWRITE //该内存的初始保护属性(读和写)

);

VirtualFree(

p,//区域地址

0x 1000 * 2//物理页面大小,字节

MEM_DECOMMIT //类型(MEM_DECOMMIT,保留虚拟地址,不保留物理页面,MEM _ RELEST,不保留虚拟地址,不保留物理页面)

);

返回;

}

3、malloc是从已经分配好的一块内存中挖出一块给自己用,本质上分配内存的不是它

三、共享内存申请和释放

一个过程:

#包含' stdafx.h '

#包括“windows.h”

#定义映射文件名' ZZZ '

#定义BUFSIZE0x1000

HANDLE g _ hMapFile

LPTSTR g _ lpBuff

int main(int argc,char* argv[])

{

//内核对象,创建物理页面

g_hMapFile=CreateFileMapping(

INVALID _ HANDLE _ VALID,当//是INVALID _ HANDLE _ VALID时,它不与文件相关联。

空,//安全描述符

PAGE_READWRITE,//保护模式(读写权限)

0,//32位通常为空。

物理页面的大小

MapFileName//指定文件映射对象的名称。

);

//用线性地址映射物理页面,g_lpBuff为虚拟内存地址。

g_lpBuff=(LPTSTR)MapViewOfFile(

G_hMapFile,//句柄

FILE_MAP_ALL_ACCESS,//虚拟内存的读写权限

0,//不使用32位。

0,//从哪里开始映射?

BUFSIZ////物理页面有多大就有多大。

);

DWORD eror=GetLastError();

*(PDWORD)g _ LPbuff=0x 12345678;//将值保存到虚拟内存地址

printf('%p ',g _ lpBuff);

getchar();

//关闭映射,物理页面的计数器只会减少一。

unmapviewofile(g _ lpBuff);

//关闭手柄

close handle(g _ hmap file);

getchar();

返回0;

}

b .进程:

#包含' stdafx.h '

#包括“windows.h”

#定义映射文件名' ZZZ '

#定义BUFSIZE0x1000

HANDLE g _ hMapFile

LPTSTR g _ lpBuff

int main(int argc,char* argv[])

{

g _ hmap file=createfile mapping(INVALID _ HANDLE _ VALUE,NULL,PAGE_READWRITE,0,BUFSIZ,MapFileName);

//用线性地址映射物理页面,g_lpBuff为虚拟内存地址。

g _ lpBuff=(LPTSTR)MapViewOfFile(g _ hmap FILE,FILE_MAP_ALL_ACCESS,0,0,BUFSIZ);

Printf ('process B:%x ',*(PDWORD)g _ lpBuff);

//关闭映射

unmapviewofile(g _ lpBuff);

//关闭手柄

close handle(g _ hmap file);

getchar();

返回0;

}

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/157183.html

(0)

相关推荐

  • debug U命令中如何查看指定内存处内容翻译成的指令

    技术debug U命令中如何查看指定内存处内容翻译成的指令debug U命令中如何查看指定内存处内容翻译成的指令,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题

    攻略 2021年11月11日
  • 边际收益,边际收益,边际成本的真正含义

    技术边际收益,边际收益,边际成本的真正含义你要结合微积分学习就明白了。利润函数=收入函数-成本函数边际利润(利润函数的导数)=边际收入-边际成本当边际利润=0时,利润函数取得极大值。所以当边际收入=边际成本时,利润为最大

    2021年10月22日
  • 兰因絮果是什么意思,与戚戚意思相似的词语是什么

    技术兰因絮果是什么意思,与戚戚意思相似的词语是什么,语文老师一枚,分享一些能替换一般词汇的高级词汇兰因絮果是什么意思: 1.陌上 陌,原来是田间的小路,后来指代一般的路。所以,陌上就是路上的意思。这是一个古典的词语,古人

    生活 2021年10月24日
  • C++为什么要保持默认操作的一贯性

    技术C++为什么要保持默认操作的一贯性这篇文章主要介绍“C++为什么要保持默认操作的一贯性”,在日常操作中,相信很多人在C++为什么要保持默认操作的一贯性问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望

    攻略 2021年11月29日
  • 从Python转到Go语言理由有哪些

    技术从Python转到Go语言理由有哪些本篇内容介绍了“从Python转到Go语言理由有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅

    攻略 2021年12月1日
  • 常见Hadoop命令使用方法是怎样的

    技术常见Hadoop命令使用方法是怎样的这篇文章将为大家详细讲解有关常见Hadoop命令使用方法是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。在学习Hadoop时

    攻略 2021年11月12日