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