fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. /* Allocate 1MB in memory pool and use this memory only to assign whenever somebody ask for memory */
  5. template <typename T>
  6. struct Allocator {
  7. using value_type = T; // type alias
  8. unordered_map<size_t, size_t> memHash;
  9.  
  10. Allocator() {
  11. int one_mb = 1024 * 1024;
  12. void * add = malloc(one_mb);
  13. memHash[(size_t)add] = one_mb;
  14. }
  15.  
  16. // n is number of items
  17. T* allocate(size_t n) {
  18. n *= sizeof(T);
  19. for (auto &[address, sz]: memHash) {
  20. if (sz < n) continue;
  21. if (sz > n) {
  22. memHash[address + n] = sz - n; // [0, 10], [13, 19]
  23. }
  24. memHash.erase(address);
  25. return (T *)address;
  26. }
  27. return nullptr;
  28. // return (T *)malloc(n * sizeof(T)); // n bytes
  29. }
  30.  
  31. void deallocate(T *ptr, size_t sz) {
  32. memHash[(size_t)ptr] = sz;
  33. if (memHash.count((size_t)ptr + sz)) {
  34. memHash[(size_t)ptr] = sz + memHash[(size_t)ptr + sz];
  35. memHash.erase((size_t)ptr + sz);
  36. }
  37. // free(ptr);
  38. }
  39. };
  40.  
  41. int main()
  42. {
  43. vector<int, Allocator<int>> v;
  44. for (int i = 0; i < 10; i++) v.emplace_back(i);
  45. for (auto &i: v) cout << i << " ";
  46. cout << "\n";
  47.  
  48. return 0;
  49. }
Success #stdin #stdout 0s 5300KB
stdin
10
aba
geeksforgeeks
geeksforgeeks
geeksforgeeks
geeksforgeeks
geeksforgeeks
geeksforgeeks
geeksforgeeks
geeksforgeeks
geeksforgeeks
stdout
255 1 2 3 4 5 6 7 8 9