开辟和映射虚拟内存块在不同位数不同操作系统的问题

一、开辟内存执行的方法流程

1.CreateFileMapping 创建一个内存块,指定大小。

2.OpenFileMapping打开一个已经存在的内存块做映射。

3.MapViewOfFile 获得内存块数据的头指针,需要制定大小。

二、操作系统:Windows 7 旗舰版, 32-bit

在不同的进程A和B,A开辟的内存块(名称为VM1)大小为1M,

B映射已经存在的内存块(名称为VM1)的大小可以设置大于1M,不会报错。

三、操作系统:Windows 8 Enterprise Edition (Build
9200), 64-bit

在不同的进程A和B,A开辟的内存块(名称为VM1)大小为1M,

B映射已经存在的内存块(名称为VM1)的大小可以设置大于1M,会报错。

“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”

解决的办法:就是开辟和映射的大小设置为一样。

开辟和映射虚拟内存块在不同位数不同操作系统的问题,布布扣,bubuko.com

时间: 2024-08-18 07:48:25

开辟和映射虚拟内存块在不同位数不同操作系统的问题的相关文章

四个名词(很常见):虚拟内存,虚拟内存地址(线性地址),物理内存,物理内存地址,逻辑地址

为什么会有虚拟内存和物理内存的区别? 正在运行的一个程序,它所需的内存是有可能大于内存条容量之和的,比如你的内存条是1G,但是你的程序需要2G的数据区,那么不是所有数据都能一起加载到内存(物理内存)中,势必有一部分数据要放到其他介质中(比如硬盘),待进程需要访问那部分数据时,再通过调度进入物理内存,所以虚拟内存是进程运行时所有内存空间的总和,他是远大于物理内存的一个虚拟存储空间,是将外存的一部分作为内存的扩展来使用,并且很多时候有一部分不在物理内存中,而物理内存就是我们平时所了解的内存条,有的地

虚拟内存(VirtualAlloc),堆(HeapAlloc/malloc/new)和Memory Mapped File

内存管理有三种方式: 1. 虚拟内存,VirtualAlloc之类的函数 2. 堆,Heapxxx函数,malloc,new等 3. 内存映射文件,Memory Mapped File 非常多人都会困惑,可是看以下的图片就会比較明确了.这个图片从MSDN上拷来. 堆和虚拟内存.从上面的图片就能够看出,事实上所谓的堆,也就是在虚拟内存上抽象出来的. 假设直接用Virtualxxx系列函数,是有一些限制的,比方每次仅仅能分配页大小倍数的内存.内存地址也必须对齐什么的.新手非常难用.正由于如此,才出现

【转】 bio 与块设备驱动

原文地址: bio 与块设备驱动 系统中能够随机访问固定大小数据片(chunk)的设备被称作块设备,这些数据片就称作块.块设备文件都是以安装文件系统的方式使用,此也是块设备通常的访问方式.块设备的访问方式是随机的,也就是可以在访问设备时,随意的从一个位置跳转到另一个位置.块设备的访问位置必须能够在介质的不同区间前后移动. 所以事实上内核不必提供一个专门的子系统来管理字符设备,但是对块设备的管理却必须要有一个专门的提供服务的子系统.块设备中,最小的可寻址单元是扇区.扇区大小一般是2的整数倍,而最常

物理内存 虚拟内存

1.物理内存的概念,虚拟内存的概念?物理内存,真实的插在板子上的内存是多大就是多大了.而对CPU来说,物理内存就是CPU的地址线可以直接进行寻址的内存空间大小.比如8086只有20根地址线,那么它的寻址空间就是1MB,我们就说8086能支持1MB的物理内存,及时我们安装了128M的内存条在板子上,我们也只能说8086拥有1MB的物理内存空间.同理我们现在大部分使用的是32位的机子,32位的386以上CPU就可以支持最大4GB的物理内存空间了.2.虚拟内存和物理内存的区别? 正在运行的一个进程,他

内存映射大文件

对于一些小文件,用普通的文件流就可以很好的解决,可是对于超大文件,比如2G或者更多,文件流就不行了,所以要使用API的内存映射的相关方法,即使是内存映射,也不能一次映射全部文件的大小,所以必须采取分块映射,每次处理一小部分. 先来看几个函数 CreateFile :打开文件 GetFileSize : 获取文件尺寸 CreateFileMapping :创建映射 MapViewOfFile :映射文件 看MapViewOfFile的帮助,他的最后两个参数都需要是页面粒度的整数倍,一般机器的页面粒

内存映射对于大文件的使用

平时很少使用大文件的内存映射,碰巧遇到了这样的要求,所以把过程记录下来,当给各位一个引子吧,因为应用不算复杂,可能有考虑不到的地方,欢迎交流. 对于一些小文件,用普通的文件流就可以很好的解决,可是对于超大文件,比如2G或者更多,文件流就不行了,所以要使用API的内存映射的相关方法,即使是内存映射,也不能一次映射全部文件的大小,所以必须采取分块映射,每次处理一小部分. 先来看几个函数 CreateFile :打开文件 GetFileSize : 获取文件尺寸 CreateFileMapping :

hibernate的基本映射

配置文件的说明 hibernate-mapping 是 hibernate 映射文件的根元素 schema: 指定所映射的数据库schema的名称.若指定该属性, 则表明会自动添加该 schema 前缀catalog:指定所映射的数据库catalog的名称. default-cascade(默认为 none): 设置hibernate默认的级联风格. 若配置 Java 属性, 集合映射时没有指定 cascade 属性, 则 Hibernate 将采用此处指定的级联风格. default-acce

Ceph块设备管理与Openstack配置(上)

Oepnstack之CEPH系列是根据Ceph Cookbook整理的笔记,分为以下几个部分: <Ceph简介> <Ceph集群操作> <Ceph块设备管理与Openstack配置> <深入Ceph> <ceph优化与性能测试> 注意:此文对应ceph版本为10.1.2 #ceph -v ceph version 10.1.2(4a2a6f72640d6b74a3bbd92798bb913ed380dcd4) 前言 目前接触到的Mitaka版本O

用C#实现的内存映射

当文件过大时,无法一次性载入内存时,就需要分次,分段的载入文件 主要是用了以下的WinAPI LPVOID MapViewOfFile(HANDLE hFileMappingObject, DWORD dwDesiredAccess, DWORD dwFileOffsetHigh, DWORD dwFileOffsetLow, DWORD dwNumberOfBytesToMap); MapViewOfFile() 函数负责把文件数据映射到进程的地址空间,参数hFileMappingObject