ฉันมักจะไม่มีปัญหาในการตัดสินใจว่าข้อมูลบางอย่างจะต้องเป็นแบบโกลบอลสแตติกหรือบนสแต็ก (ไม่มีการจัดสรรแบบไดนามิกที่นี่ดังนั้นจึงไม่มีการใช้ฮีป) ฉันได้อ่านคำถามสองสามข้อเช่นคำถามนี้แต่คำถามของฉันเฉพาะเจาะจงมากขึ้นเพราะมันเกี่ยวข้องกับข้อมูลจำนวนมากมากเมื่อเทียบกับหน่วยความจำระบบ
ฉันกำลังใช้งานโค้ดที่มีอยู่ซึ่งฉันพยายามปรับปรุง (ออกแบบปัญหาที่เป็นไปได้การแสดง ฯลฯ ) รหัสนี้วิ่งบน MCU 8bit เก่ามีเพียง4KB ของแรม ในรหัสนี้ฉันต้องเผชิญกับการใช้งานของอาร์เรย์เกือบ 1KB (ใช่1KB ในระบบRAM 4KB ) แต่ละไบต์ของอาร์เรย์นี้ถูกใช้นั่นไม่ใช่คำถาม ปัญหาคือว่าอาร์เรย์นี้เป็นอาร์เรย์แบบคงที่ในไฟล์ที่มีการประกาศดังนั้นวงจรชีวิตของมันเป็นเช่นเดียวกับโปรแกรมหนึ่ง (เช่นถือได้ว่าไม่มีที่สิ้นสุด)
อย่างไรก็ตามหลังจากอ่านโค้ดฉันเพิ่งค้นพบว่าอาเรย์นี้ไม่จำเป็นต้องมีวงจรชีวิตที่ไม่มีที่สิ้นสุดมันถูกสร้างและจัดการด้วยวิธีการที่สมบูรณ์ดังนั้นเราควรจะสามารถประกาศได้เฉพาะในฟังก์ชั่นที่ใช้ วิธีนี้มันจะอยู่ในสแต็คและเราจะบันทึก 1KB ของ RAM นี้
ทีนี้คำถาม: นี่เป็นความคิดที่ดีไหม? จากมุมมองการออกแบบหากไม่ต้องการวงจรชีวิตที่ไม่มีที่สิ้นสุด / ทั่วโลกมันเป็นของสแต็ค แต่เดี๋ยวก่อนนั่นคือ 1KB จาก 4KB ไม่มีข้อเสียในการจัดสรร RAM 25% ของแบบนี้ใช่ไหม? (นั่นอาจเป็น 50% หรือมากกว่าของสแต็ก)
ใครบางคนสามารถแบ่งปันประสบการณ์บางอย่างกับสถานการณ์แบบนี้หรือใครบางคนคิดเกี่ยวกับเหตุผลที่ถูกต้องที่จะไม่วางอาร์เรย์นี้ในกอง? ฉันกำลังมองหาข้อเสียทางเทคนิคเช่นเดียวกับความคิดเห็นในการออกแบบ
สิ่งเดียวที่ฉันใส่ใจคือฉันต้องทำให้แน่ใจว่าจริง ๆ แล้วฉันมีสแต็ก 1KB ฟรีเมื่อเข้าสู่ฟังก์ชันนี้ บางทีนั่นอาจเป็นสิ่งที่ฉันต้องระวัง