内存

技术内存 内存一、物理内存和虚拟内存
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)

相关推荐

  • python如何爬取基金股票最新数据并用excel绘制树状图

    技术python如何爬取基金股票最新数据并用excel绘制树状图python如何爬取基金股票最新数据并用excel绘制树状图,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到

    攻略 2021年10月26日
  • 退烧按摩手法图解法,小儿发热推拿方法有哪些

    技术退烧按摩手法图解法,小儿发热推拿方法有哪些小儿发烧推拿手法有什么小儿发热是指小儿体温超过正常范围,可见于多种急、慢性疾病过程中退烧按摩手法图解法。根据小儿发热病因可将其分为外感发热、肺胃实热和阴虚内热,临床可采用按摩

    生活 2021年10月22日
  • q函数,数学Q

    技术q函数,数学Qlog表示对数。如果a^n = b(a>0,且a≠1),那么数n叫做以a为底b的对数,记做n=log(a)b,【a是下标】其中,a叫做“底数”,b叫做“真数”。一般地,函数y=logax(a>0,且a≠

    生活 2021年10月29日
  • Java学习笔记32——二维数组

    技术Java学习笔记32——二维数组 Java学习笔记32——二维数组二维数组
    概述二维数组:就是元素是一维数组的数组举例:二班{{小王,小李},{小刘,小明},{小朱,小伟}}二维数组的定义格式
    格式

    礼包 2021年12月1日
  • 利用PHP使用Redis常见的使用场景有哪些

    技术利用PHP使用Redis常见的使用场景有哪些这篇文章主要为大家展示了“利用PHP使用Redis常见的使用场景有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“利用PHP

    攻略 2021年11月25日
  • 本地歌曲怎么导入快手,快手里面怎么设置本地音乐

    技术本地歌曲怎么导入快手,快手里面怎么设置本地音乐快手APP加载本地音乐本地歌曲怎么导入快手:
    1、首先打开快手APP,右上角有个摄像机图标,点进去;
    2、进去后,随便创建一个作品,选择需要添加的照片,选择【多图】后点击

    生活 2021年10月30日