เวกเตอร์ของอาร์เรย์ติดกันหรือไม่?

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>)