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

4
เกม C ++ จัดการกับการจัดสรรหน่วยความจำล้มเหลวได้อย่างไร
ฉันตระหนักถึงหลายเกมที่เขียนด้วย C ++ แต่ไม่ได้ใช้ข้อยกเว้น เนื่องจากการจัดการกับความล้มเหลวในการจัดสรรหน่วยความจำใน C ++ นั้นโดยทั่วไปถูกสร้างขึ้นโดยมีstd::bad_allocข้อยกเว้นเกมเหล่านี้จะจัดการกับความล้มเหลวได้อย่างไร? พวกเขาเพียงแค่ผิดพลาดหรือมีวิธีการจัดการและกู้คืนจากข้อผิดพลาดออกจำ?

2
GPU จัดการกับพื้นผิวและ VRAM อย่างไร
จริงๆแล้วมันเป็นคำถามที่เกี่ยวข้องระหว่าง: พื้นผิวที่ถูกบีบอัด (dxt5 / dxt1 ฯลฯ ) แตกหักอย่างสมบูรณ์ในขณะที่กำลังแสดงผลไปป์ไลน์หรือไม่? หากคำตอบของคำถามแรกนั้นเป็นจริงหน่วยความจำจะถูกจัดการอย่างไรสำหรับพื้นผิวที่ไม่มีการบีบอัดขนาดใหญ่หลาย ๆ framebuffer ต่างจาก VRAM ใน GPU สมัยใหม่หรือไม่?
18 textures  gpu  memory 

2
การจัดสรรและเพิ่มหน่วยความจำขนาดใหญ่เมื่อเริ่มต้นใช้งาน“ ล้างหน่วยความจำหรือไม่”
หนังสือเกมการเข้ารหัสเสร็จสมบูรณ์ฉบับที่สี่บทที่ 5 (การเริ่มต้นเกมและการปิดระบบ ) ส่วนการตรวจสอบหน่วยความจำมีตัวอย่างโค้ดที่น่าสนใจนี้: bool CheckMemory(const DWORDLONG physicalRAMNeeded, const DWORDLONG virtualRAMNeeded) { MEMORYSTATUSEX status; GlobalMemoryStatusEx(&status); if (status.ullTotalPhys < physicalRAMNeeded) { // you don’t have enough physical memory. Tell the player to go get a // real computer and give this one to his mother. GCC_ERROR("CheckMemory Failure: Not enough physical …
18 c++  memory 

3
คุณเตรียมตัวอย่างไรสำหรับเงื่อนไขหน่วยความจำไม่เพียงพอ?
นี้จะเป็นเรื่องง่ายสำหรับเกมที่มีขอบเขตกำหนดไว้อย่างดี แต่คำถามคือเกี่ยวกับเกม sandbox ที่ที่ผู้เล่นจะได้รับอนุญาตให้สร้างและสร้างอะไร เทคนิคที่เป็นไปได้: ใช้พูลหน่วยความจำที่มีขีด จำกัด สูงสุด ลบวัตถุที่ไม่ต้องการเป็นระยะ ๆ จัดสรรจำนวนหน่วยความจำเพิ่มเติมที่จุดเริ่มต้นเพื่อให้สามารถเป็นอิสระในภายหลังเป็นกลไกการกู้คืน ฉันจะบอกว่าประมาณ 2-4 MBs สิ่งนี้มีแนวโน้มที่จะเกิดขึ้นในแพลตฟอร์มมือถือ / คอนโซลซึ่งหน่วยความจำมักจะถูก จำกัด ไม่เหมือนกับพีซีขนาด 16 GB ของคุณ ฉันสมมติว่าคุณสามารถควบคุมการจัดสรร / การจัดสรรคืนหน่วยความจำได้อย่างสมบูรณ์และไม่มีการรวบรวมขยะ นั่นเป็นเหตุผลที่ฉันกำลังติดแท็กสิ่งนี้เป็น C ++ โปรดทราบว่าฉันไม่ได้พูดถึงรายการ C ++ ที่มีประสิทธิภาพ 7 "เตรียมพร้อมสำหรับเงื่อนไขหน่วยความจำไม่เพียงพอ"แม้ว่าจะเกี่ยวข้องกัน แต่ฉันต้องการดูคำตอบเพิ่มเติมเกี่ยวกับการพัฒนาเกมซึ่งคุณมักจะควบคุมสิ่งที่มากกว่า สิ่งที่เกิดขึ้น เพื่อสรุปคำถามคุณจะเตรียมตัวอย่างไรสำหรับเงื่อนไขหน่วยความจำไม่เพียงพอสำหรับเกมแซนด์บ็อกซ์เมื่อคุณกำหนดเป้าหมายแพลตฟอร์มด้วยคอนโซลหน่วยความจำ / อุปกรณ์เคลื่อนที่ จำกัด

3
CPU - การไหลของข้อมูลหน่วยความจำ GPU [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันเป็นนักเขียนโปรแกรมกราฟิกมือใหม่และฉันเพิ่งสงสัยว่าเมื่อเร็ว ๆ นี้ - โมเดลข้อมูล (ตาข่ายและวัสดุ) ไหลจากแอปพลิเคชัน (หน่วยความจำ CPU) ไปยังการ์ดกราฟิก (หน่วยความจำ GPU) อย่างไร? บอกว่าฉันมีรูปแบบคงที่ (เช่นสิ่งปลูกสร้าง) ที่ฉันโหลดและตั้งค่าหนึ่งครั้งและไม่เปลี่ยนแปลงตลอดอายุการใช้งานของแอป ข้อมูลส่งไปยังหน่วยความจำ GPU เพียงครั้งเดียวและนั่งอยู่ที่นั่นตลอดไปหรือไม่? เมื่อแบบจำลองได้รับการแสดงผลจริงในแต่ละเฟรมแล้วตัวประมวลผล GPU ต้องดึงข้อมูลทุกครั้งจากหน่วยความจำ GPU หรือไม่ สิ่งที่ฉันหมายถึงคือ - ถ้าฉันมี 2 แบบจำลองที่แสดงหลายครั้งในแต่ละครั้ง - มันจะสำคัญไหมถ้าฉันแสดงครั้งแรกทีละหลายครั้งและอีกอันที่สองหลายครั้งหรือถ้าฉันแสดงครั้งแรกเพียงครั้งเดียว interleaving มันแบบนั้นเหรอ? ฉันสามารถเรียกคำถามนี้ว่า "การไหลของข้อมูล GPU ภายใน" ในแง่นี้ เห็นได้ชัดว่าการ์ดกราฟิกมี RAM จำกัด - เมื่อมันไม่สามารถเก็บข้อมูลโมเดลทั้งหมดที่จำเป็นสำหรับการเรนเดอร์ …

5
ทำไมขนาดก้อนมักจะเป็นกำลังของสอง
มีโคลนนิ่ง Minecraft จำนวนมากอยู่ที่นั่นและฉันกำลังดำเนินการตามแนวทางของฉันเอง หลักการของการเรนเดอร์ภูมิประเทศคือการปูกระเบื้องให้ทั่วทั้งโลกเป็นชิ้นขนาดคงที่เพื่อลดความพยายามในการเปลี่ยนแปลงในภาษาท้องถิ่น ใน Minecraft ขนาดก้อนเท่ากับ 16 x 16 x 256 เท่าที่ฉันตอนนี้ และในโคลนฉันยังเห็นพลังของหมายเลข 2 ด้วยเสมอ มีเหตุผลใดที่เกี่ยวข้องกับประสิทธิภาพหรือหน่วยความจำ ฉันรู้ว่าพลังของ 2 มีบทบาทพิเศษในคอมพิวเตอร์ไบนารี แต่สิ่งที่จะทำอย่างไรกับขนาดของก้อน?

1
ฉันจะรู้ได้อย่างไรว่าหน่วยความจำไม่ได้จัดการอย่างถูกต้อง?
ดูเหมือนว่ารอยเท้าหน่วยความจำของเกมของฉัน (2D) จะเพิ่มขึ้นทุกครั้งที่ฉันโหลดพื้นผิวเช่นเมื่อฉันเริ่มเกมจะใช้ RAM ส่วนตัว 30 MB หลังจากข้ามไฟล์พื้นหลัง ~ 367mb ดังนั้นใน RAM ในบางจุดมันเพิ่มขึ้นเป็น RAM ส่วนตัว 54 mb สิ่งเดียวกันเกิดขึ้นหลังจากไปในระยะทางเดียวกัน แต่กลับไปมาระหว่างจุดสองจุดซ้ำ ๆ กัน อย่างไรก็ตามการอ่านของฉันแสดงว่าโปรแกรมเรียก glDeleteTextures อย่างถูกต้องประมาณหนึ่งวินาทีหลังจากหน้าจอพื้นผิวดับลง และ valgrind ไม่พบรอยรั่วใด ๆ ฉันจะรู้ได้อย่างไรว่าฉันควรจะกังวลเกี่ยวกับเรื่องนี้หรือถ้ามันเป็นเพียงการเล่นโวหารของหน่วยความจำหน้า OS?
12 opengl  memory 

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