Tôi muốn biết tôi đang sử dụng bao nhiêu RAM trong dự án của mình, theo như tôi có thể nói, không có cách nào để thực sự giải quyết được điều đó (ngoài việc tự mình trải qua và tính toán nó). Tôi đã đến một giai đoạn trong một dự án khá lớn, nơi tôi đã xác định rằng tôi sắp hết RAM.
Tôi đã xác định điều này bởi vì tôi có thể thêm một phần và sau đó tất cả các địa ngục vỡ ra ở một nơi khác trong mã của tôi mà không có lý do rõ ràng. Nếu tôi #ifndef
một cái gì đó khác, nó hoạt động trở lại. Không có gì sai về mặt lập trình với mã mới.
Tôi đã nghi ngờ một lúc rằng tôi sắp hết RAM. Tôi không nghĩ rằng tôi đang sử dụng quá nhiều stack (mặc dù điều đó là có thể), cách tốt nhất để xác định lượng RAM tôi thực sự đang sử dụng là bao nhiêu?
Đi qua và cố gắng để giải quyết nó, tôi gặp vấn đề khi tôi nhận được enum và structs; Chúng có giá bao nhiêu bộ nhớ?
Chỉnh sửa đầu tiên : CSONG, tôi đã chỉnh sửa bản phác thảo của mình rất nhiều kể từ khi bắt đầu, đây không phải là kết quả thực tế ban đầu tôi nhận được, nhưng chúng là những gì tôi đang nhận được bây giờ.
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
Dòng đầu tiên (với văn bản 17554) không hoạt động, sau khi chỉnh sửa nhiều, dòng thứ hai (với văn bản 16316) đang hoạt động như bình thường.
chỉnh sửa: dòng thứ ba có mọi thứ hoạt động, đọc nối tiếp, các chức năng mới của tôi, v.v. Về cơ bản tôi đã loại bỏ một số biến toàn cục và mã trùng lặp. Tôi đề cập đến điều này bởi vì (như nghi ngờ) nó không phải là về mã này cho mỗi sae, nó phải là về việc sử dụng RAM. Điều này đưa tôi trở lại câu hỏi ban đầu, "làm thế nào để đo lường tốt nhất" Tôi vẫn đang kiểm tra một số câu trả lời, cảm ơn.
Làm thế nào để tôi thực sự giải thích các thông tin trên?
Cho đến nay sự hiểu biết của tôi là:
`TEXT` is program instruction memory
`DATA` is variables (unitialised?) in program memory
`BSS` is variables occupying RAM
vì BSS nhỏ hơn đáng kể so với 1024 byte, tại sao cái thứ hai hoạt động, nhưng cái thứ nhất thì không? Nếu đó là DATA+BSS
cả hai chiếm hơn 1024.
chỉnh sửa lại: Tôi đã chỉnh sửa câu hỏi để bao gồm mã, nhưng bây giờ tôi đã xóa nó vì nó thực sự không liên quan gì đến vấn đề (ngoài việc có thể thực hành mã hóa kém, khai báo biến và tương tự). Bạn có thể xem lại mã bằng cách xem lại các chỉnh sửa nếu bạn thực sự muốn xem nó. Tôi muốn quay trở lại câu hỏi trong tay, chủ yếu dựa trên: Cách đo mức sử dụng RAM.
String
loại trong chương trình của bạn? Điều này được biết là thực hiện phân bổ và phát hành bộ nhớ động thường xuyên, có thể phân mảnh heap đến điểm mà bạn có thể không còn nhớ.
String
s vì chi phí quá cao. Tôi rất vui khi làm việc với các mảng char, điều đó nói rằng, tôi hầu như luôn xác định tất cả các mảng char của mình với một kích thước cố định (hiện tại, tôi có MỘT mảng byte không hoàn toàn vì tôi thay đổi độ dài nội dung cho các biên dịch lại khác nhau.