문제

부스트 메모리 매핑 파일이 어떻게 작동하는지 이해하려고합니다. 다음 코드는 작동하지만 수행해야 할 작업을 수행하지만 문제는 생성 된 파일이 메모리 대신 디스크 (실행 파일의 동일한 디렉토리에)에 저장된다는 것입니다. 어딘가에 설정할 깃발이있을 수도 있지만 찾을 수 없었습니다 ...
모든 정보에 미리 감사드립니다!

    #include <iostream>
    #include <string>
    #include <cstring>
    #include <boost/iostreams/device/mapped_file.hpp>
    using std::cout;
    using std::endl;

    int main(int argc, char** argv) {
     const int blockSize = 64;
     bool writer = false;

     if(argc > 1) {
      if(!strcmp(argv[1], "w"))
       writer = true;
     }

     boost::iostreams::mapped_file_params  params;
     params.path = "map.dat";
    // params.length = 1024;     // default: all the file
     params.new_file_size = blockSize;

     if(writer) {
      cout << "Writer" << endl;
      params.mode = std::ios_base::out;
     }
     else {
      cout << "Reader" << endl;
      params.mode = std::ios_base::in;
     }

        boost::iostreams::mapped_file  mf;
        mf.open(params);

     if(writer)
     {
      char *block = mf.data();
      strcpy(block, "Test data block...\0");
      cout << "Written: " << block << endl;
     }
     else
     {
      cout << "Reading: " << mf.const_data() << endl;
     }

     mf.close();

        return 0;
    }
/*
    Compiler options: -Wall -I$(PATH_BOOST_INCLUDE) -ggdb
    Linker options: -L$(PATH_BOOST_LIBS) -lboost_iostreams-mt -lboost_system-mt -lboost_filesystem-mt -DBOOST_FILESYSTEM_NO_DEPRECATED
*/

사용 된 컴파일러 : GCC 4.2.1
부스트 1.41.0
OS : MACOS X 10.6.2

도움이 되었습니까?

해결책

메모리 매핑 매핑 디스크 파일을 메모리에 넣습니다. 이 일이 발생하기 위해서는 디스크에 파일이 있어야합니다!

편집하다: 귀하의 의견에서 공유 메모리를 사용하고 싶은 것 같습니다. http://www.boost.org/doc/libs/1_41_0/doc/html/interprocess/quick_guide.html

다른 팁

메모리 매핑 파일은 특히 파일의 내용이 프로그램에서 메모리 영역으로 표시되는 원인에 관한 것입니다. 그들은 특별한 '메모리'파일을 만드는 것이 아닙니다. 부스트의 개념은 mmap 대부분의 다른 운영 체제에서 유닉스 및 유사한 시설에서 시스템 호출. 이 기능 주변의 일반적인 래퍼로 설계되었습니다.

당신이하려고하는 것이 두 프로세스로 공유되는 메모리 영역을 만드는 것이라면, 메모리 매핑 파일은 당신을 위해이를 수행 할 수 있지만 해당 메모리의 내용을 반영하는 온 디스크 파일을 갖는 비용으로이를 수행 할 수 있습니다. Linux에서는 파일 내용이 단순히 메모리에 캐시되며 파일 내용에 해당하는 프로그램의 메모리 페이지는 캐시에서 사용하는 것과 동일한 물리적 페이지가되므로 여전히 합리적으로 효율적입니다.

당신이 원하는 것이 단지 Ramdisk라면 ...

대부분의 최신 운영 체제는 프로세스가 필요하지 않은 디스크 캐시에 메모리를 사용합니다. Ramdisk가 실제로 필요하지 않습니다. Linux에는 파일 시스템 유형이 호출됩니다 tmpfs 부츠 사이에 지속될 필요가없는 파일 시스템에 사용할 수 있습니다. 파일은 일반적으로 메모리에 있지만 다른 종류의 메모리와 마찬가지로 교체 할 수 있습니다.

예, 시스템 v 공유 메모리가 존재하며 절대적으로 심연 디자인이 있습니다. Sys V 발기 통신 프리미티브를 10 피트 극으로 만지지 않을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top