พิจารณาตัวอย่างต่อไปนี้:
#include <array>
int main() {
using huge_type = std::array<char, 20*1024*1024>;
huge_type t;
}
เห็นได้ชัดว่ามันจะผิดพลาดในแพลตฟอร์มส่วนใหญ่เนื่องจากขนาดสแต็คเริ่มต้นมักจะน้อยกว่า 20MB
พิจารณารหัสต่อไปนี้:
#include <array>
#include <vector>
int main() {
using huge_type = std::array<char, 20*1024*1024>;
std::vector<huge_type> v(1);
}
น่าแปลกที่มันเกิดปัญหาเช่นกัน! การย้อนกลับ (ด้วยหนึ่งในเวอร์ชันล่าสุดของ libstdc ++) นำไปสู่include/bits/stl_uninitialized.h
ไฟล์ซึ่งเราสามารถเห็นบรรทัดต่อไปนี้:
typedef typename iterator_traits<_ForwardIterator>::value_type _ValueType;
std::fill(__first, __last, _ValueType());
ตัวvector
สร้างปรับขนาดต้องเริ่มต้นองค์ประกอบและนี่คือวิธีการใช้งาน เห็นได้ชัดว่า_ValueType()
ชั่วคราวเกิดปัญหาสแต็ก
คำถามคือการใช้งานที่สอดคล้องหรือไม่ ถ้าใช่จริง ๆ แล้วหมายความว่าการใช้เวกเตอร์ขนาดใหญ่นั้นค่อนข้าง จำกัด ใช่ไหม?
std::allocator
ถูกนำมาใช้