15     static const int BS = 65536 * 4;
 
   18     std::vector<int*> poolS[7];
 
   21     std::vector<int> emptyS[7];
 
   25         for (
auto &it : index)
 
   29         for (
auto &it : emptyS)
 
   38         for (
auto &it : poolS)
 
   53         static const size_t tSize = 
sizeof(T);
 
   56         else if (tSize <= 8) { size = 1;; buff = 2; }
 
   57         else if (tSize <= 16) { size = 2; buff = 4; }
 
   58         else if (tSize <= 32) { size = 3; buff = 8; }
 
   59         else if (tSize <= 64) { size = 4; buff = 16; }
 
   60         else if (tSize <= 128) { size = 5; buff = 32; }
 
   61         else if (tSize <= 256) { size = 6; buff = 64; }
 
   68         if (emptyS[size].empty())
 
   72             if (index[size] >= BS)
 
   75                 poolS[size].push_back(
new int[BS]);
 
   79             return new(&poolS[size][poolS[size].size() - 1][index[size]]) T();
 
   84             int n = emptyS[size].back();
 
   85             emptyS[size].pop_back();
 
   86             return new(&poolS[size][n / BS][n % BS]) T();
 
   95         static const size_t tSize = 
sizeof(T);
 
   98         else if (tSize <= 8) { size = 1;; buff = 2; }
 
   99         else if (tSize <= 16) { size = 2; buff = 4; }
 
  100         else if (tSize <= 32) { size = 3; buff = 8; }
 
  101         else if (tSize <= 64) { size = 4; buff = 16; }
 
  102         else if (tSize <= 128) { size = 5; buff = 32; }
 
  103         else if (tSize <= 256) { size = 6; buff = 64; }
 
  111         if ( emptyS[size].empty() )
 
  114             if (index[size] >= BS)
 
  116                 poolS[size].push_back(
new int[BS]);
 
  120             return new( &poolS[size][poolS[size].size()-1][index[size]]) T(data);
 
  125             int n = emptyS[size].back();
 
  126             emptyS[size].pop_back();
 
  127             return new(&poolS[size][n / BS][n % BS]) T(data);
 
  136         static const size_t tSize = 
sizeof(T);
 
  139         else if (tSize <= 8) { size = 1;; buff = 2; }
 
  140         else if (tSize <= 16) { size = 2; buff = 4; }
 
  141         else if (tSize <= 32) { size = 3; buff = 8; }
 
  142         else if (tSize <= 64) { size = 4; buff = 16; }
 
  143         else if (tSize <= 128) { size = 5; buff = 32; }
 
  144         else if (tSize <= 256) { size = 6; buff = 64; }
 
  156         while( (
unsigned int)a < poolS[size].size())
 
  158             n = ((
int*)pt - &poolS[size][a][0]);
 
  160             if ( n >= 0 && n < BS)
 
  162                 emptyS[size].push_back(n + a*BS);
 
汎用メモリプール. 
Definition: Pool.h:12