Pertimbangkan cuplikan berikut:
#include <array>
int main() {
using huge_type = std::array<char, 20*1024*1024>;
huge_type t;
}
Jelas itu akan crash pada sebagian besar platform, karena ukuran tumpukan standar biasanya kurang dari 20MB.
Sekarang pertimbangkan kode berikut:
#include <array>
#include <vector>
int main() {
using huge_type = std::array<char, 20*1024*1024>;
std::vector<huge_type> v(1);
}
Anehnya itu juga crash! Traceback (dengan salah satu versi libstdc ++ terbaru) mengarah ke include/bits/stl_uninitialized.h
file, di mana kita dapat melihat baris berikut:
typedef typename iterator_traits<_ForwardIterator>::value_type _ValueType;
std::fill(__first, __last, _ValueType());
Mengubah ukuran vector
konstruktor harus secara default menginisialisasi elemen, dan ini adalah bagaimana itu diterapkan. Jelas, _ValueType()
sementara crash stack.
Pertanyaannya adalah apakah itu implementasi yang sesuai. Jika ya, itu sebenarnya berarti penggunaan vektor tipe besar sangat terbatas, bukan?
std::allocator
digunakan.