#include #include #include #include #include #include #include #include int main() { using namespace boost::interprocess; const size_t mapped_segment_size = 0x1 << 20; // 1MB const char* test_strings[] = { "a1", "b2", "c3", "d4", "e5" }; const size_t num_strings = sizeof(test_strings)/sizeof(const char*); typedef managed_mapped_file::segment_manager segment_manager_t; typedef allocator shm_char_allocator_t; typedef basic_string, shm_char_allocator_t> shm_string_t; typedef allocator shm_string_allocator_t; typedef vector shm_string_vector_t; managed_mapped_file segment(open_or_create, "TestMappedFile", mapped_segment_size); shm_char_allocator_t shm_char_allocator(segment.get_segment_manager()); shm_string_allocator_t shm_string_allocator(segment.get_segment_manager()); shm_string_vector_t* vec = segment.find("TestStringVector").first; if (vec == 0) { // We didn't find it; create and populate it vec = segment.construct("TestStringVector")(shm_string_allocator); for (size_t i = 0; i < num_strings; ++i) { vec->push_back(shm_string_t(test_strings[i], shm_char_allocator)); } } // Print out values std::cout << "Shared memory allocator: " << std::endl; for (shm_string_vector_t::iterator i = vec->begin(); i != vec->end(); ++i) { const shm_string_t& s = *i; std::cout << "String: '" << s << "' size: " << s.size() << " length: " << s.length() << " c_str(): '" << s.c_str() << "'" << std::endl; } std::cout << "Standard allocator: " << std::endl; vector vec2; for (size_t j = 0; j < num_strings; ++j) { vec2.push_back(string(test_strings[j])); } for (vector::iterator k = vec2.begin(); k != vec2.end(); ++k) { const string& s = *k; std::cout << "String: '" << s << "' size: " << s.size() << " length: " << s.length() << " c_str(): '" << s.c_str() << "'" << std::endl; } return 0; }