fork download
  1. #include <stdio.h>
  2. #include <memory>
  3. #include <vector>
  4. #include <list>
  5.  
  6. namespace mmap_allocator_namespace {
  7. template <typename T>
  8. class mmap_allocator: public std::allocator <T> {
  9. public: typedef size_t size_type;
  10. typedef T * pointer;
  11. typedef
  12. const T * const_pointer;
  13.  
  14. template <typename _Tp1>
  15. struct rebind {
  16. typedef mmap_allocator <_Tp1> other;
  17. };
  18.  
  19. pointer allocate(size_type n,
  20. const void * hint = 0) {
  21. fprintf(stdout, "Alloc %d bytes.\n", n * sizeof(T));
  22. return std::allocator <T> ::allocate(n, hint);
  23. }
  24.  
  25. void deallocate(pointer p, size_type n) {
  26. fprintf(stdout, "Dealloc %d bytes (%p).\n", n * sizeof(T), p);
  27. return std::allocator <T> ::deallocate(p, n);
  28. }
  29.  
  30. mmap_allocator() throw (): std::allocator <T> () {
  31. fprintf(stdout, "Hello allocator!\n");
  32. }
  33. mmap_allocator(const mmap_allocator & a) throw (): std::allocator <T> (a) {}
  34. template <class U>
  35. mmap_allocator(const mmap_allocator <U> & a) throw (): std::allocator <T> (a) {}~mmap_allocator() throw () {}
  36. };
  37. }
  38.  
  39. using namespace std;
  40. using namespace mmap_allocator_namespace;
  41.  
  42. int main() {
  43. // раскомментируем нужное:
  44. // vector<int, mmap_allocator<int>> int_vec(32, 0, mmap_allocator<int>());
  45. // list<int, mmap_allocator<int>> int_lst(32, 0, mmap_allocator<int>());
  46. return 0;
  47. }
Success #stdin #stdout 0s 4384KB
stdin
Standard input is empty
stdout
Standard output is empty