C ++ BOOST: общая память Windows get_size () возвращает ноль - PullRequest
2 голосов
/ 29 июля 2010

Ниже приведены официальные документы BOOST. Почему я всегда получаю нулевой размер при звонке region.get_size()? Что я делаю не так?

int main(int argc, char *argv[])
{

  //Create a native windows shared memory object.
  windows_shared_memory shm (create_only, "MySharedMemory", read_write, 1000);

  //Map the whole shared memory in this process
  mapped_region region(shm, read_write);
  cout << "SIZE IS " << region.get_size() << endl;

return 0;
}

Ответы [ 2 ]

3 голосов
/ 30 июля 2010

Я думаю, что получил ответ: Из документов Boost:

Совместная память собственных окон имеет и другое ограничение: процесс может открывать и отображать всю общую память, созданную другим процессом, но можетЯ не знаю, каков размер этой памяти.Это ограничение налагается Windows API, поэтому пользователь должен каким-то образом передавать размер сегмента процессам, открывающим сегмент.

1 голос
/ 30 июля 2010

В документации boost :: interprocess для используемого вами конструктора mapped_region сказано:

Создает область отображения отображаемой памяти "mapping",начиная со смещения «смещение», и размер отображения будет «размер» .Отображение может быть открыто только для чтения «read_only» или «read-write» read_write.

Так что предоставьте ненулевой размер, и все будет работать как положено: mapped_region region(shm, read_write, 0, 1000);

...