这为什么会出错?对共享内存设置为0

ForgetTomorrow 2020-08-27 11:05:34


共享内存大小设成1024时没问题,设置成10*1024时在meset这里报错,为什么啊?
...全文
158 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgl7903 2020-08-27
  • 打赏
  • 举报
回复
1按系统页面的整数倍来处理, 2 返回的句柄 & 缓冲区指针要先判断是否有效 SYSTEM_INFO sysInfo; GetNativeSystemInfo(&sysInfo); int BUF_SIZE = 102400 * sysInfo.dwPageSize;
ForgetTomorrow 2020-08-27
  • 打赏
  • 举报
回复
引用 楼主 ForgetTomorrow 的回复:


共享内存大小设成1024时没问题,设置成10*1024时在meset这里报错,为什么啊?

调试发现最多只能4*1024大小,再大就不行了
zgl7903 2020-08-27
  • 打赏
  • 举报
回复



int Test()
{
  int iErr = 0;

  TCHAR szName[]=TEXT("Global\\MyFileMappingObject");
  
  SYSTEM_INFO sysInfo;
  GetNativeSystemInfo(&sysInfo);
  int BUF_SIZE = 102400 * sysInfo.dwPageSize;

  HANDLE hMapFile = NULL;
  LPVOID pBuf = NULL;

  do
  {
    hMapFile = CreateFileMapping(
      INVALID_HANDLE_VALUE,    // use paging file
      NULL,                    // default security 
      PAGE_READWRITE,          // read/write access
      0,                       // max. object size 
      BUF_SIZE,                // buffer size  
      szName);                 // name of mapping object

    if (hMapFile != NULL) 
    {
      printf("CreateFileMapping %d (bytes) ok\n", BUF_SIZE);
    }
    else
    { 
      iErr = GetLastError();
      printf("Could not create file mapping object (%d).\n", iErr);
      break;
    }

    pBuf = MapViewOfFile(hMapFile,   // handle to map object
      FILE_MAP_ALL_ACCESS, // read/write permission
      0, 0, 0);           

    if (pBuf == NULL) 
    { 
      iErr = GetLastError();
      printf("Could not map view of file (%d).\n", iErr); 
      break;
    }

    for(LONG i=0; i<BUF_SIZE; i++)
    {
      ((BYTE*)pBuf)[i] = (BYTE)i;
    }

    printf("Write done\n");

    _getch();

  }while(0);

  if(pBuf != NULL)
  {
    UnmapViewOfFile(pBuf);
    pBuf = NULL;
  }

  if(hMapFile != NULL)
  {
    CloseHandle(hMapFile);
    hMapFile = NULL;
  }

  return iErr;
}


ForgetTomorrow 2020-08-27
  • 打赏
  • 举报
回复
windows系统有对共享内存大小限制吗?我这只能设置到1kb,大于1kb访问错误
ForgetTomorrow 2020-08-27
  • 打赏
  • 举报
回复
引用 2 楼 zgl7903 的回复:
1按系统页面的整数倍来处理, 2 返回的句柄 & 缓冲区指针要先判断是否有效

SYSTEM_INFO sysInfo;
GetNativeSystemInfo(&sysInfo);
int BUF_SIZE = 102400 * sysInfo.dwPageSize;


到4096就崩溃

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧