ฉันอยากรู้ว่าฉันใช้ RAM เท่าใดในโครงการเท่าที่ฉันสามารถบอกได้ว่าไม่มีวิธีการทำงานจริง ๆ (นอกเหนือจากการผ่านและคำนวณด้วยตนเอง) ฉันได้ขึ้นเวทีในโครงการที่ค่อนข้างใหญ่ซึ่งฉันตัดสินใจแล้วว่า RAM ของฉันหมด
ฉันได้พิจารณาสิ่งนี้เพราะฉันสามารถเพิ่มหัวข้อและจากนั้นนรกทั้งหมดก็หลุดไปที่อื่นในรหัสของฉันโดยไม่มีเหตุผลที่ชัดเจน ถ้าฉันมี#ifndef
อย่างอื่นมันก็ใช้งานได้อีก ไม่มีอะไรผิดปกติทางโปรแกรมกับรหัสใหม่
ฉันสงสัยว่าในขณะที่ฉันไปถึงจุดจบของ RAM ที่มีอยู่ ฉันไม่คิดว่าฉันใช้สแต็กมากเกินไป (แม้ว่าจะเป็นไปได้) วิธีที่ดีที่สุดในการพิจารณาจำนวนแรมที่ฉันใช้จริงคืออะไร
เมื่อผ่านไปและพยายามที่จะทำงานออกมาฉันมีปัญหาเมื่อฉันไปหา enums และ structs; หน่วยความจำมีราคาเท่าใด
แก้ไขครั้งแรก : นอกจากนี้ฉันได้แก้ไขร่างของฉันตั้งแต่เริ่มต้นสิ่งเหล่านี้ไม่ใช่ผลลัพธ์ที่แท้จริงที่ฉันได้รับในตอนแรก แต่เป็นสิ่งที่ฉันได้รับตอนนี้
text data bss dec hex filename
17554 844 449 18847 499f HA15_20140317w.cpp.elf
16316 694 409 17419 440b HA15_20140317w.cpp.elf
17346 790 426 18562 4882 HA15_20140317w.cpp.elf
บรรทัดแรก (ที่มีข้อความ 17554) ไม่ทำงานหลังจากแก้ไขมากแล้วบรรทัดที่สอง (พร้อมข้อความ 16316) ก็ทำงานได้ตามที่ควรจะเป็น
แก้ไข: บรรทัดที่สามมีการทำงานทุกอย่างการอ่านแบบอนุกรมฟังก์ชั่นใหม่ของฉัน ฯลฯ ฉันจะลบตัวแปรทั่วโลกและรหัสซ้ำ ฉันพูดถึงสิ่งนี้เพราะ (สงสัยว่า) มันไม่เกี่ยวกับรหัสนี้ต่อคนมันต้องเกี่ยวกับการใช้ RAM ซึ่งนำฉันกลับไปที่คำถามเดิม "วิธีวัดให้ดีที่สุด" ฉันยังคงตรวจสอบคำตอบอยู่ขอบคุณ
ฉันจะตีความข้อมูลข้างต้นได้อย่างไร
จนถึงตอนนี้ความเข้าใจของฉันคือ:
`TEXT` is program instruction memory
`DATA` is variables (unitialised?) in program memory
`BSS` is variables occupying RAM
เนื่องจาก BSS มีขนาดน้อยกว่า 1024 ไบต์อย่างมากเหตุใดจึงใช้งานครั้งที่สอง แต่อันแรกไม่ทำงาน ถ้าเป็นเช่นDATA+BSS
นั้นทั้งคู่ครอบครองมากกว่า 1024
การแก้ไขอีกครั้ง:ฉันแก้ไขคำถามเพื่อรวมรหัส แต่ตอนนี้ฉันได้ลบออกเพราะจริงๆแล้วมันไม่มีอะไรเกี่ยวข้องกับปัญหา (นอกเหนือจากการเข้ารหัสที่ไม่ดีการประกาศตัวแปรและสิ่งที่คล้ายกัน) คุณสามารถตรวจสอบรหัสโดยการมองย้อนกลับไปผ่านการแก้ไขหากคุณจริงๆต้องการที่จะเห็นมัน ฉันต้องการกลับไปที่คำถามซึ่งมีพื้นฐานมาจาก: วิธีการวัดการใช้ RAM
String
พิมพ์ในโปรแกรมของคุณหรือไม่? เป็นที่ทราบกันว่าทำการจัดสรรและปล่อยหน่วยความจำแบบไดนามิกบ่อยครั้งซึ่งอาจแยกส่วนฮีปไปยังจุดที่คุณอาจไม่จำ
String
s เพราะค่าใช้จ่าย ฉันมีความสุขที่ได้ทำงานกับ char arrays ที่กล่าวว่าฉันเกือบจะกำหนดอาร์เรย์ char ทั้งหมดของฉันด้วยขนาดคงที่ (ในขณะนี้ฉันมีอาร์เรย์หนึ่งไบต์ที่ไม่หมดจดเพราะฉันเปลี่ยนความยาวเนื้อหาสำหรับการรีคอมไพล์ต่าง ๆ