เวกเตอร์ของอาร์เรย์ติดกันหรือไม่?
Dec 29 2020
ถ้าฉันสร้าง
std::vector<std::array<double, 2>> points;
std::vector<double> points2;
ฉันรู้ว่า point2 จะเป็นหน่วยความจำที่ต่อเนื่องกันซึ่งถือเป็นสองเท่าในฮีป ฉันคิดว่าจุดนั้นจะเป็นหน่วยความจำที่ต่อเนื่องกันของ double * ในสแต็ก? แต่อาร์เรย์เหล่านั้นจะติดกันในสแตกหรือไม่? สมมติว่าฉันกำลังจัดเก็บคู่ผสมเพื่อแสดงถึงบางจุด
พอยต์ 2 อยู่ในหน่วยความจำดังนี้ [x0 y0 x1 y1 x2 y2 ... ] แล้วพอยต์ล่ะ? วิธีที่ดีที่สุดในการจัดเก็บคู่ผสมในกรณีนี้คืออะไร? ขอบคุณสำหรับคำแนะนำใด ๆ
คำตอบ
2 DanielLangr Dec 29 2020 at 04:16
เวกเตอร์ของอาร์เรย์ติดกันหรือไม่?
ไม่มันไม่ใช่. std::array
อาจมีช่องว่างภายในหรือแม้แต่สมาชิกเพิ่มเติมในตอนท้าย รายละเอียดเพิ่มเติมเช่นที่นี่:
- ข้อมูลในอาร์เรย์ std :: ที่ซ้อนกันรับประกันว่าจะติดกันหรือไม่
- คือขนาดของอาร์เรย์ std :: ที่กำหนดโดยมาตรฐาน
แต่ผมเชื่อว่านี่เป็นมากไม่น่าจะเกิดขึ้นและคุณก็สามารถตรวจสอบสถานการณ์ดังกล่าวโดยการเปรียบเทียบกับ2 * sizeof(double)
sizeof(std::array<double, 2>)