คำถามติดแท็ก memory-efficiency

วิธีการจัดระเบียบและจัดเก็บข้อมูลเพื่อให้ใช้หน่วยความจำในปริมาณที่น้อยที่สุดเท่าที่จะเป็นไปได้ในขณะที่ยังคงประโยชน์อย่างเต็มที่

6
แผนที่ที่มีไทล์ 20 ล้านแผ่นทำให้เกมหน่วยความจำหมดฉันจะหลีกเลี่ยงได้อย่างไร
ในขณะที่โหลดแผนที่ขนาดใหญ่พิเศษวิธีการโหลดจะมีข้อยกเว้นหน่วยความจำเกิดขึ้นซึ่งมีการสร้างไทล์แผนที่ใหม่ ฉันต้องการให้มีการประมวลผลแผนที่ทั้งหมดอย่างน้อยในแอปเซิร์ฟเวอร์ (และลูกค้าถ้าเป็นไปได้) ฉันจะแก้ปัญหานี้ได้อย่างไร UPD:คำถามที่นี่คือวิธีทำให้เกมหยุดทำงานล้มเหลวเมื่อยังมีหน่วยความจำว่างสำหรับให้ใช้ ส่วนแผนที่แยกเป็นชิ้นมันเป็นวิธีที่ดี แต่ไม่ใช่สิ่งที่ฉันต้องการในกรณีของฉัน UPD2:ตอนแรกฉันไปและกำหนดพื้นผิวให้กับทุก ๆ อินสแตนซ์ใหม่ของคลาสกระเบื้องและนั่นคือสิ่งที่ใช้หน่วยความจำมาก (เช่นเวลาโหลด) ตอนนี้ใช้พื้นที่น้อยกว่าประมาณสี่เท่า ขอบคุณทุกคนตอนนี้ฉันสามารถเล่นแผนที่ขนาดใหญ่ได้โดยไม่ต้องคิดจะแยกพวกมันออกเป็นชิ้น ๆ UPD3:หลังจากเขียนรหัสใหม่เพื่อดูว่าอาเรย์ของคุณสมบัติไทล์ทำงานได้เร็วขึ้นหรือใช้หน่วยความจำน้อยกว่า (มากกว่าคุณสมบัติที่กล่าวไว้ในไทล์ของพวกเขาเป็นคุณสมบัติของวัตถุ) ฉันพบว่าไม่เพียง แต่ใช้เวลามากลอง ไม่ได้นำการปรับปรุงประสิทธิภาพมาใช้และทำให้เกมนั้นยากมากที่จะทำการดีบัก

1
เหตุใดจึงสำคัญที่ต้องแสดงเป้าหมายด้วยขนาดบิตเดียวกัน
ฉันกำลังคิดว่า GBuffer ประเภทใดที่ฉันจะต้องใช้สำหรับการแรเงาที่เลื่อนออกไปดังนั้นฉันจึงพยายามจัดทำเอกสารออนไลน์ด้วยตนเองเกี่ยวกับสิ่งที่พบบ่อยที่สุดและรูปแบบของพวกเขา GBuffer ส่วนใหญ่ที่ฉันเคยเห็นใช้ขนาดบิตเดียวกันสำหรับแต่ละเป้าหมายการแสดงผลซึ่งนำไปสู่ช่องที่ไม่ได้ใช้ อย่างไรก็ตามในการเดาแรกสำหรับ GBuffer ของฉันบนกระดาษฉันต้องการสองเป้าหมาย 24 บิตและสอง 32 คนหรือสาม 24 และหนึ่ง 32 ฉันเข้าใจว่าการมีขนาด "สิ่งที่แนบ" เหมือนกันสามารถจัดแนวได้ดีกว่า แต่ในทางปฏิบัติแล้วมันจะดีกว่าถ้าจะเสียช่องสัญญาณ (หรือสำรองไว้เพื่อใช้ในอนาคต) และมี RTs ขนาดเท่ากันหรือควรใช้สิ่งที่ต้องการ ในกรณีก่อนหน้านี้ทำไมมันถึงได้เปรียบเช่นนั้นบิต 24 บิตจะถูกเพิ่มเป็น 32 หรือไม่?

3
เหตุใดการจัดการหน่วยความจำแบบกำหนดเองจึงจำเป็นสำหรับสินทรัพย์
ทรัพยากรที่เกี่ยวข้องกับการเขียนโปรแกรมเกมโดยเฉพาะอย่างยิ่งเกม 3D โลกเปิดพูดคุยเกี่ยวกับวิธีที่คุณต้องขนถ่ายและโหลดสินทรัพย์ไปยังและจากดิสก์หน่วยความจำระบบและหน่วยความจำวิดีโออย่างต่อเนื่อง ฉันสามารถเข้าใจสิ่งนี้ได้บนคอนโซลเนื่องจากพวกเขามีโครงร่างการจัดการหน่วยความจำที่ง่ายมากที่ไม่สามารถจัดการกับการล้นที่อาจเกิดขึ้นได้ อย่างไรก็ตามบนพีซีสถานการณ์แตกต่างกันมาก มีหน่วยความจำเสมือนที่จัดทำโดยระบบปฏิบัติการสำหรับหน่วยความจำระบบและไดรเวอร์กราฟิกจัดการการสลับไปมาจาก CPU ไปยัง GPU เหตุใดจึงไม่เพียงพอที่จะโหลดทุกอย่างพร้อมกันและต้องจัดการกับการดึงข้อมูลล่วงหน้าและอาจทำให้แน่ใจว่าไม่มีการปิดกั้นในขณะที่มีการสลับสินทรัพย์ที่ต้องการ mallocนี้ไม่ได้บอกว่าทุกอย่างจะถูกจัดสรรอย่างไร้เดียงสาใช้สิ่งที่ต้องการ ทุกอย่างจะถูกเก็บไว้อย่างต่อเนื่องและแคชสอดคล้องกัน มันง่ายกว่าที่จะทำให้การเข้าถึงหน่วยความจำของคุณมีประสิทธิภาพถ้าคุณไม่ต้องกังวลกับการสลับหน้าเข้าและออกด้วยตนเอง ... UPDATE: หลังจากอ่านบิตลงในการถ่ายโอนบัฟเฟอร์แบบอะซิงโครนัสฉันได้รับแนวคิดว่าวิธีที่ไดรเวอร์กราฟิกสามารถเพจหน่วยความจำเข้าและออกโดยอัตโนมัตินั้นไม่ดี สิ่งนี้ถือเป็นจริงสำหรับทรัพยากรของ CPU หรือไม่; คือมันจะดีกว่าที่จะจัดการด้วยตนเองเสมอเมื่อทรัพยากรที่กำหนดจะถูกโหลดและยกเลิกการโหลดแม้ในที่ที่มีหน่วยความจำเสมือน?

6
การใช้หน่วยความจำในเกม Flash มีมากเกินไป?
ฉันกำลังพัฒนาเกม Flash และฉันสามารถชื่นชมได้ว่าการใช้หน่วยความจำค่อนข้างสูงสำหรับเกม Flash (ฉันคิดว่า) สมมติว่า 100+ MB ดังนั้นเมื่อพูดถึงการใช้หน่วยความจำในเกมแฟลช

2
'Zoning' พื้นที่บนแผนที่ขนาดใหญ่เช่นเดียวกับดันเจี้ยน
เกมของฉันมีแผนที่เหมือนของ Minecraft ในลักษณะที่เป็น pseudoinfinite และสร้างแบบสุ่ม และใหญ่ สมมติว่าผู้ใช้สำรวจโซน 1000x1000 (2D ที่นี่) นั่นคือ 1,000,000 แผ่น เห็นได้ชัดว่าฉันจะไม่สามารถเก็บมันไว้ในความทรงจำได้ และฉันไม่ต้องการเพิกเฉยทุกอย่างออกจากไพ่ 10 ใบหรือรัศมีใด ๆ - ทั้งคู่จะไม่มีอะไรอัปเดต (NPC ทั้งหมดอาจเป็นกระเบื้องปฏิกิริยา) และฉันจะต้องทำงานกับตำแหน่งที่น่าอึดอัดใจเช่น 1382,12918 ดังนั้นถ้าฉันจะแบ่งมันออกเป็นชิ้น ๆ หรือโซนหรืออะไรก็ตามที่บอกว่าเป็น 64x64 แผ่นฉันจะต้องเก็บแต่ละตำแหน่งของวัตถุและวัตถุเช่น: ก้อน a, b ตำแหน่ง x, y แต่ถ้าฉันต้องการดันเจี้ยนและสิ่งที่คล้ายในแผนที่ของฉัน กระเบื้องเดี่ยวที่อาจนำไปสู่ดันเจี้ยน 40 ชั้นแต่ละอันมีพื้นที่ 40x40 ฉันไม่สามารถเก็บพวกมันไว้ในแผนที่เดียวกันได้ และมีด้านความจำ ฉันสามารถเก็บหน่วยความจำในเวลาเดียวกันได้มากเท่าไหร่ ฉันสามารถเรียงต่อกันตาม ID ได้อย่างง่ายดายและมีอาร์เรย์ 2D ปกติอยู่ที่นั่น หรืออีกครั้งมีวิธีแก้ปัญหาที่มีประสิทธิภาพมากกว่าการมีไฟล์ข้อมูลประเภทไทล์หรือไม่ ดังนั้นสำหรับ …

1
ทำไมไทล์ 16 × 16 พิกเซลถึงเป็นธรรมดา
มีเหตุผลที่ดีสำหรับกระเบื้อง (เช่นMinecraft ) เป็น 16x16 หรือไม่? ฉันมีความรู้สึกว่ามันเกี่ยวข้องกับเลขฐานสองเพราะ 16 อยู่10000ในเลขฐานสอง แต่นั่นอาจเป็นเรื่องบังเอิญ ฉันต้องการที่จะรู้ว่าเป็นเพราะฉันต้องการที่จะสร้างเกมที่มีการสร้างภูมิประเทศและฉันต้องการที่จะรู้ว่ากระเบื้องของฉันควรจะใหญ่แค่ไหนหรือถ้ามันไม่สำคัญ

2
โครงสร้างที่มีประสิทธิภาพสำหรับการแทนลำดับชั้นการแปลง
ใครสามารถแนะนำวิธีที่มีประสิทธิภาพของหน่วยความจำเพื่อเป็นตัวแทนของต้นไม้ของเมทริกซ์ตัวอย่างเช่นในโมเดลลำดับชั้น? ฉันมีความกระตือรือร้นเป็นพิเศษในการรักษาตำแหน่งของข้อมูลและฉันสงสัยว่าแนวทางแบบโครงสร้างของอาร์เรย์ (เมทริกซ์และดัชนีกับเมทริกซ์) อาจเหมาะสม เช่นเดียวกับการคำนวณเมทริกซ์ที่ถูกล่ามโซ่โครงสร้างนี้อาจจะถูกคัดลอกไปรอบ ๆ ในหน่วยความจำอย่างยุติธรรมดังนั้นการมีพื้นที่เก็บข้อมูลติดกันจะเป็นโบนัสก้อนโต
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.