Aşağıdaki snippet'i düşünün:
#include <array>
int main() {
using huge_type = std::array<char, 20*1024*1024>;
huge_type t;
}
Açıktır ki, varsayılan yığın boyutu genellikle 20 MB'den küçük olduğundan, çoğu platformda çökecektir.
Şimdi aşağıdaki kodu göz önünde bulundurun:
#include <array>
#include <vector>
int main() {
using huge_type = std::array<char, 20*1024*1024>;
std::vector<huge_type> v(1);
}
Şaşırtıcı bir şekilde de çöküyor! Geri izleme (son libstdc ++ sürümlerinden biriyle) include/bits/stl_uninitialized.h
, aşağıdaki satırları görebileceğimiz dosyaya yol açar :
typedef typename iterator_traits<_ForwardIterator>::value_type _ValueType;
std::fill(__first, __last, _ValueType());
Yeniden boyutlandırma vector
kurucusu öğeleri varsayılan olarak başlatmalıdır ve bu şekilde uygulanır. Belli ki, _ValueType()
yığın yığını çöküyor.
Soru, bunun uygun bir uygulama olup olmadığıdır. Evetse, aslında büyük tipte bir vektörün kullanımının oldukça sınırlı olduğu anlamına gelir, değil mi?
std::allocator
değer kullanılırsa kullanılır.