4
การพลาดแคชและการใช้งานใน Entity Systems
เมื่อเร็ว ๆ นี้ฉันได้ทำการค้นคว้าและนำระบบ Entity มาใช้สำหรับกรอบงานของฉัน ฉันคิดว่าฉันอ่านบทความเกือบทั้งหมด reddits และคำถามเกี่ยวกับมันที่ฉันสามารถหาได้และจนถึงตอนนี้ฉันคิดว่าฉันเข้าใจความคิดที่ดีพอ อย่างไรก็ตามมันทำให้เกิดคำถามบางอย่างเกี่ยวกับพฤติกรรม C ++ โดยรวมภาษาที่ฉันใช้ระบบเอนทิตีในรวมถึงปัญหาการใช้งานบางอย่าง ดังนั้นวิธีการหนึ่งก็คือการจัดเก็บอาร์เรย์ของส่วนประกอบในเอนทิตีโดยตรงซึ่งฉันไม่ได้ทำเพราะมันทำลายสถานที่เก็บแคชเมื่อวนซ้ำผ่านข้อมูล ด้วยเหตุนี้ฉันจึงตัดสินใจที่จะมีหนึ่งอาเรย์ต่อประเภทส่วนประกอบดังนั้นส่วนประกอบทั้งหมดของประเภทเดียวกันจึงต่อเนื่องกันในหน่วยความจำซึ่งควรเป็นทางออกที่ดีที่สุดสำหรับการวนซ้ำอย่างรวดเร็ว แต่เมื่อฉันต้องทำซ้ำอาร์เรย์ของส่วนประกอบเพื่อทำบางสิ่งบางอย่างกับพวกเขาจากระบบในการติดตั้งเกมจริงฉันสังเกตว่าฉันมักจะทำงานกับส่วนประกอบสองชนิดหรือมากกว่าในคราวเดียว ตัวอย่างเช่นระบบการเรนเดอร์ใช้องค์ประกอบการแปลงและโมเดลร่วมกันเพื่อทำการเรียกการเรนเดอร์ คำถามของฉันคือเนื่องจากฉันไม่ได้วนซ้ำแถวลำดับที่ต่อเนื่องกันในแต่ละครั้งในกรณีเหล่านี้ฉันจะเสียสละประสิทธิภาพที่เพิ่มขึ้นทันทีจากการจัดสรรส่วนประกอบด้วยวิธีนี้หรือไม่? เป็นปัญหาหรือไม่เมื่อฉันทำซ้ำใน C ++ อาร์เรย์ที่ต่อเนื่องกันสองชุดและใช้ข้อมูลจากทั้งสองในแต่ละรอบ อีกสิ่งหนึ่งที่ฉันต้องการถามคือควรเก็บการอ้างอิงถึงส่วนประกอบหรือเอนทิตีอย่างไรเนื่องจากลักษณะของการจัดวางองค์ประกอบในหน่วยความจำพวกเขาสามารถสลับตำแหน่งในอาเรย์ได้อย่างง่ายดาย ลดขนาดปล่อยให้ตัวชี้ส่วนประกอบของฉันหรือจัดการไม่ถูกต้อง คุณจะแนะนำให้จัดการกับกรณีเหล่านี้อย่างไรเนื่องจากฉันมักจะพบว่าตัวเองต้องการทำงานกับการแปลงและส่วนประกอบอื่น ๆ ทุกเฟรมและถ้ามือจับหรือตัวชี้ของฉันไม่ถูกต้องมันค่อนข้างยุ่งที่จะทำการค้นหาทุกเฟรม
18
c++
performance
entity