美文网首页
c++写内存

c++写内存

作者: 繁木成林 | 来源:发表于2018-03-30 02:08 被阅读25次
#include "stdafx.h"
#include <iostream>
#include <assert.h>
#include <cstring>
#include <atlstr.h>
#include <Windows.h>
#include <WinBase.h>

HANDLE hMap;
HANDLE hAddress;
int iErrCode;

//第一步要定义所要共享的内容的结构体
#pragma pack(1)
struct TShareMem
{
    int i;
    char Data[256];
    float a[12];
    TShareMem() {
        i = 234;
        int m=0, n=0;
        while (m< 256) {
            Data[m++] = 'b';
        }
        while (n < 12) {
            a[n++] = n * 3.14f;
        }
        
    }
};
char *starShare;
char *szBuf;
TShareMem* pShareMem;
void CreateMap()
{
    //char * strBuf;


    //创建共享内存,这个函数的最后一个参数即是创建的共享内存的名称 

    hMap = ::CreateFileMapping((HANDLE)-1, NULL, PAGE_READWRITE, 0, sizeof(TShareMem), _T("NewMap"));

    if (hMap == NULL)
    {
        iErrCode = GetLastError();
        std::cout << "不能创建内存映射文件!" << std::endl;
    }
    //写共享内存区,将内存映射为文件
    pShareMem = (TShareMem*)MapViewOfFile(hMap, FILE_MAP_WRITE, 0, 0, 0);
    memcpy(pShareMem, starShare,sizeof(TShareMem));

}
void ReadMap(){
    //打开刚刚创建的共享内存区 
    hMap = ::OpenFileMapping(FILE_MAP_WRITE, false, _T("NewMap"));
    if (hMap == NULL)
    {
        iErrCode = GetLastError();
        std::cout<<"不能定位内存映射文件块!"<<std::endl;
    }
    //读共享内存区 
    hAddress = MapViewOfFile(hMap, FILE_MAP_WRITE, 0, 0, 0);
    //pShareMem = (TShareMem*)MapViewOfFile(hMap, FILE_MAP_WRITE, 0, 0, 0); 

    if (hAddress == NULL)
        std::cout<<"Can''t View Memory Map"<<std::endl;

    szBuf = new char[sizeof(TShareMem)];

    //拷贝共享内存区的内容 
    CopyMemory(szBuf, hAddress, sizeof(TShareMem));
    TShareMem *result = (TShareMem*)szBuf;
    std::cout << result->a[6] << std::endl;
}

int main()
{
    int i;
    starShare = new char[sizeof(TShareMem)];
    
    TShareMem shm ;
    shm.Data[0] = 'q';
    memcpy(starShare, &shm, sizeof(TShareMem));
    while (1) {
        std::cin >> i;
        if (i == 1) {
            CreateMap();
        }
        else {
            ReadMap();
        }
    }   
    return 0;
}

相关文章

  • c++写内存

  • C++雾中风景番外篇3:GDB与Valgrind ,调试代码内存

    写 C++的同学想必有太多和内存打交道的血泪经验了,常常被 C++的内存问题搅的焦头烂额。(写 core 的经验了...

  • c++内存管理

    c++内存管理长文 c++内存管理

  • 内存管理

    内容包括: C++内存管理 Java内存管理 C++内存管理 内存分配方式 在C++中,内存分成5个区,分别是栈、...

  • BD

    写一段代码实现shared ptr 虚拟内存 物理内存 c++ 成员函数存放位置, 如何调用. this指针如何传...

  • C++运算符重载实现(加号、左移、递增、赋值、关系运算符、函数调

    先来复习一下C++的内存分区问题~ C++内存分区 C++程序的内存分区可划分为四大内存分区:堆、栈、全局/静态存...

  • C/C++内存和crash分析

    C/C++内存和crash分析 标签(空格分隔): C/C++ native内存 段错误 native内存泄露 C...

  • 内存池

    参考资料 C++内存池介绍与经典内存池的实现 C++ 应用程序性能优化,第 6 章:内存池 linux c++ 内...

  • C++中New关键字和命名空间

    动态内存分配 C++中的动态内存分配C++中通过new关键字进行动态内存申请C++中的动态内存申请是基于类型进行的...

  • Java内存泄漏

    本文将会介绍: C++中的内存泄露 Java内存管理与垃圾回收 Java中的内存泄漏 一、C++中的内存泄露 在大...

网友评论

      本文标题:c++写内存

      本文链接:https://www.haomeiwen.com/subject/hjkbcftx.html