内存

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

相关推荐

  • Dojo Build有什么用

    技术Dojo Build有什么用小编给大家分享一下Dojo Build有什么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Dojo 提供了一

    攻略 2021年10月19日
  • 狗狗感冒了会自己好吗,狗狗感冒了,吃感冒冲剂能好吗

    技术狗狗感冒了会自己好吗,狗狗感冒了,吃感冒冲剂能好吗狗狗感冒在天气忽冷忽热的时候比较多见,如果狗狗不小心着凉感冒,特别是在天气忽冷忽热的时候,或者是比较冷的天气里总是趴在冰冷的地板上,一着凉感冒就会出现打喷嚏、流鼻涕等

    2021年10月20日
  • 如何实现JavaScript函数式的浅析

    技术如何实现JavaScript函数式的浅析这篇文章给大家介绍如何实现JavaScript函数式的浅析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。JS函数式浅析0x00 入门的导语(废话)最近两年

    攻略 2021年11月16日
  • oracle数据库CPU过高问题分析

    技术oracle数据库CPU过高问题分析这篇文章主要讲解了“oracle数据库CPU过高问题分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“oracle数据库CPU过高

    攻略 2021年11月11日
  • 如何理解Java设计模式责任链模式

    技术如何理解Java设计模式责任链模式本篇文章给大家分享的是有关如何理解Java设计模式责任链模式,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、责任链模

    攻略 2021年10月23日
  • HBase如何使用HashTable/SyncTable工具同步集群数据

    技术HBase如何使用HashTable/SyncTable工具同步集群数据这篇文章主要为大家展示了“HBase如何使用HashTable/SyncTable工具同步集群数据”,内容简而易懂,条理清晰,希望能够帮助大家解

    攻略 2021年12月8日