doc_managed_heap_memory.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 76 行

CPP
76
字号
////////////////////////////////////////////////////////////////////////////////// (C) Copyright Ion Gaztanaga 2006-2007. Distributed under the Boost// Software License, Version 1.0. (See accompanying file// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)//// See http://www.boost.org/libs/interprocess for documentation.////////////////////////////////////////////////////////////////////////////////#include <boost/interprocess/detail/config_begin.hpp>#include <boost/interprocess/detail/workaround.hpp>//[doc_managed_heap_memory#include <boost/interprocess/containers/list.hpp>#include <boost/interprocess/managed_heap_memory.hpp>#include <boost/interprocess/allocators/allocator.hpp>#include <cstddef>using namespace boost::interprocess;typedef list<int, allocator<int, managed_heap_memory::segment_manager> >    MyList;int main (){   //We will create a buffer of 1000 bytes to store a list   managed_heap_memory heap_memory(1000);   MyList * mylist = heap_memory.construct<MyList>("MyList")                        (heap_memory.get_segment_manager());   //Obtain handle, that identifies the list in the buffer   managed_heap_memory::handle_t list_handle = heap_memory.get_handle_from_address(mylist);   //Fill list until there is no more memory in the buffer   try{      while(1) {         mylist->insert(mylist->begin(), 0);      }   }   catch(const bad_alloc &){      //memory is full   }   //Let's obtain the size of the list   std::size_t old_size = mylist->size();   //To make the list bigger, let's increase the heap buffer   //in 1000 bytes more.   heap_memory.grow(1000);   //If memory has been reallocated, the old pointer is invalid, so   //use previously obtained handle to find the new pointer.   mylist = static_cast<MyList *>               (heap_memory.get_address_from_handle(list_handle));      //Fill list until there is no more memory in the buffer   try{      while(1) {         mylist->insert(mylist->begin(), 0);      }   }   catch(const bad_alloc &){      //memory is full   }   //Let's obtain the new size of the list         std::size_t new_size = mylist->size();   assert(new_size > old_size);   //Destroy list   heap_memory.destroy_ptr(mylist);   return 0;}//]#include <boost/interprocess/detail/config_end.hpp>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?