标签: memory-mapped-files

使用 MapViewOfFile 有什么限制吗?

我正在尝试将内存映射文件用作:

hFile = ::CreateFile(State.Path, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,
                                 0, OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN, 0);//open the file

if(hFile !=INVALID_HANDLE_VALUE){
hMap= ::CreateFileMapping(hFile, 0, PAGE_READONLY | SEC_COMMIT, 0, 0, 0);//create Mem mapping for the file in virtual memory
if( hMap!=NULL){
base = ::MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, 0);//load the mapped file into the RAM
//start to compare some bytes (values) from mspaint.exe file in Win7
if( *((BYTE *)base + 0x1C3DF0)== 0x05 )
i++; 
if( *((BYTE *)base + 0x25250C)== 0x21 )
i++;
if( *((BYTE *)base + 0x25272A)== 0x97 …
Run Code Online (Sandbox Code Playgroud)

c++ winapi memory-leaks memory-mapped-files memory-mapping

3
推荐指数
1
解决办法
3714
查看次数

如何在 Linux 平台上管理 mmap 的内存使用?

我一直在尝试使用 mmap 在合理的时间内读取相对较大的文件。我知道 mumap 方法;但我的问题是,只要我使用该文件,我就希望它映射到我的进程空间中;与此同时,每当我的进程由于从该文件加载太多页面到 RAM 而开始耗尽空间时;我希望它们与新页面交换(或希望它们与 lru 页面交换),而不会造成任何问题。内核的内部内存管理模块是否代表我处理交换,或者我有责任删除它们(如果是,如何?mumap?)?请考虑以下因素:

我的平台是android(也是linux平台的一种),我只想阅读页面;但根本没有写入(O_RDONLY 和 PROT_READ),我使用 MAP_SHARED 因为它可能被所有其他进程共享(事实上,只有一个进程可以读取:))。

提前致谢。

android mmap memory-mapped-files linux-kernel

3
推荐指数
1
解决办法
1052
查看次数

与 MemoryMappedFile 并行读写

如果我同时并行读写会发生什么MemoryMappedFile?是否有必要Mutext在阅读之前锁定它们,如 MSDN 上的示例所示?

内存映射文件

c# ipc memory-mapped-files inter-process-communicat

3
推荐指数
1
解决办法
1752
查看次数

MemoryMappedFile.CreateFromFile始终抛出UnauthorizedAccessException

我意识到.NET 4.0处于测试阶段,但我希望有人能够解决这个问题.我正在尝试从DLL创建一个内存映射文件:

FileStream file = File.OpenRead("C:\mydll.dll");
using (MemoryMappedFile mappedFile = MemoryMappedFile.CreateFromFile(file,
    "PEIMAGE", 1024 * 1024, MemoryMappedFileAccess.ReadExecute))
{
    using (MemoryMappedViewStream viewStream = mappedFile.CreateViewStream())
    {
        // read from the view stream
    }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,无论我做什么,我总是得到一个UnauthorizedAccessException,MSDN文档说明:

操作系统拒绝对文件的指定访问权限; 例如,access设置为Write或ReadWrite,但文件或目录是只读的.

我用Sysinternals Process Monitor监视我的应用程序,它显示该文件确实正在成功打开.我也尝试过映射其他非DLL文件的内存,但结果相同.

.net c# .net-4.0 memory-mapped-files

2
推荐指数
2
解决办法
5620
查看次数

c#内存映射文件读取

我正在尝试阅读一些文本文件(每个大约300 kb).到目前为止,我一直在使用Filestream打开文件并阅读它.(TAB DELIMITED).但是,我听说.net 4.0中的内存映射文件.它会让我的阅读速度更快吗?

是否有任何示例代码可以读取简单文件并比较性能?

c# memory-mapped-files

2
推荐指数
1
解决办法
5582
查看次数

如何将结构导出到文件,然后将内存映射到文件?

我有一个结构,我想导出到一个文件,然后mmap()该文件.一个问题是struct有一个成员变量是一个字符串,我不确定mmap如何处理它.在这种情况下,所有这些字符串都具有相同的大小,8个字符.我正在使用Windows,虽然我正在使用我在网上找到的mmap()函数,该函数应该复制Linux mmap()函数.

结构本身定义为:

struct testStruct
{
    string testString;
    unsigned int testInt;
    unsigned int tsetArr[9];
};
Run Code Online (Sandbox Code Playgroud)

是否可以为对象定义sizeof()的返回值?

是否可以映射包含结构数据的文件?

我必须使用什么代码将结构导出到文件,然后mmap它?

c++ struct mmap memory-mapped-files memory-mapping

2
推荐指数
1
解决办法
945
查看次数

页面文件支持的内存映射文件与堆 - 有什么区别?

什么是利用系统页面文件支持的内存映射文件的优势(通过CreateFileMapping(INVALID_HANDLE_VALUE, ...),而不是仅仅从堆中分配内存的常用方法(malloc(...),HeapAlloc(...)等)?

我什么时候应该使用哪个?

c c++ heap winapi memory-mapped-files

2
推荐指数
1
解决办法
902
查看次数

内存映射文件

我编写了一个代码,用于将内容写入映射缓冲区,该缓冲区使用mmap()系统调用进行映射.在我对映射缓冲区进行了一些更改之后,我调用了msync().它应该更新到磁盘上的文件.

但是,它没有对磁盘上的文件进行任何更改.

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h> 
#include <sys/types.h>
#include <sys/stat.h>
#include<sys/mman.h>
#include<fcntl.h>
#define FILEMODE S_IRWXU | S_IRGRP | S_IROTH
#define MAX 150

main(int argc,char *argv[])
{
int fd,ret,len;
long int len_file;
struct stat st;
char *addr;
char buf[MAX];


if(argc > 1)
{
    if((fd = open(argv[1],O_RDWR | O_APPEND | O_CREAT ,FILEMODE)) < 0)
        perror("Error in file opening");

    if((ret=fstat(fd,&st)) < 0)
        perror("Error in fstat");

    len_file = st.st_size;

           /*len_file having the total length of the file(fd).*/


    if((addr=mmap(NULL,len_file,PROT_READ|PROT_WRITE,MAP_PRIVATE,fd,0)) == MAP_FAILED)
        perror("Error in mmap");

    len …
Run Code Online (Sandbox Code Playgroud)

c unix mmap memory-mapped-files

2
推荐指数
1
解决办法
1万
查看次数

MemoryMappedFile不适用于2个进程?

我用MemoryMappedFileas msdn做了一个简单的测试:

2个进程,1个内存映射文件:

  • 第一个进程添加字符串"1"
  • 第一个进程等待
  • 第二个进程添加字符串"2"并终止
  • 第一个进程现在读取整个内存映射文件

过程A:

using (MemoryMappedFile mmf = MemoryMappedFile.CreateNew("testmap", 10000))
            {
                bool mutexCreated;
                Mutex mutex = new Mutex(true, "testmapmutex", out mutexCreated);
                using (MemoryMappedViewStream stream = mmf.CreateViewStream())
                {
                    BinaryWriter writer = new BinaryWriter(stream, Encoding.UTF8);
                    writer.Write("1");
                }
                mutex.ReleaseMutex();
                Console.WriteLine("Start Process B and press ENTER to continue.");
                Console.ReadLine();
                mutex.WaitOne();
                using (MemoryMappedViewStream stream = mmf.CreateViewStream())
                {
                    BinaryReader reader = new BinaryReader(stream, Encoding.UTF8);
                    Console.WriteLine("Process A says: {0}", reader.ReadString());
                    Console.WriteLine("Process B says: {0}", reader.ReadString());
                }
                mutex.ReleaseMutex();
            }
Run Code Online (Sandbox Code Playgroud)

过程B:

 using …
Run Code Online (Sandbox Code Playgroud)

c# .net-4.0 memory-mapped-files

2
推荐指数
1
解决办法
1749
查看次数

c ++ boost写入内存映射文件

我正在寻找使用C++和boost库快速编写文件.我想使用内存映射文件.但几乎所有的例子都是关于阅读.
工作很简单.有一个字符串数组.数组元素大约有2百万.

ofstream outFile("text.txt");
for (int i = 0; i < 2000000; ++i) {
    outFile << strArray[i] << "\n";
}
outFile.close();
Run Code Online (Sandbox Code Playgroud)

我怎么能用内存映射文件呢?我在哪里可以找到使用内存映射文件的文件?

谢谢你的关心.

c++ boost memory-mapped-files

2
推荐指数
1
解决办法
5959
查看次数