Chciałbym wiedzieć, ile pamięci RAM używam w swoim projekcie, o ile mogę stwierdzić, że nie ma sposobu, aby to naprawdę rozwiązać (oprócz samodzielnego przejrzenia i obliczenia). Doszedłem do etapu w dość dużym projekcie, w którym ustaliłem, że brakuje mi pamięci RAM.
Ustaliłem to, ponieważ mogę dodać sekcję, a potem piekło rozpada się gdzie indziej w moim kodzie bez wyraźnego powodu. Jeśli mam #ifndef
coś innego, to znowu działa. Z nowym kodem nie ma nic programowo niepoprawnego.
Przez chwilę podejrzewałem, że zbliżam się do końca dostępnej pamięci RAM. Nie sądzę, że używam zbyt dużo stosów (chociaż jest to możliwe), jaki jest najlepszy sposób na określenie, ile pamięci RAM faktycznie używam?
Przechodząc i próbując to wypracować, mam problemy, gdy dochodzę do wyliczeń i struktur; ile kosztują pamięci?
pierwsza edycja: RÓWNIEŻ edytowałem szkic od samego początku, to nie są rzeczywiste wyniki, które początkowo otrzymałem, ale to, co teraz otrzymuję.
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
Pierwszy wiersz (z tekstem 17554) nie działał, po wielu edycjach drugi wiersz (z tekstem 16316) działa tak, jak powinien.
edycja: trzeci wiersz ma wszystko, co działa, odczyt szeregowy, moje nowe funkcje itp. Zasadniczo usunąłem niektóre zmienne globalne i zduplikowałem kod. Wspominam o tym, ponieważ (jak podejrzewam) nie chodzi o ten kod per sae, musi dotyczyć użycia pamięci RAM. To prowadzi mnie z powrotem do pierwotnego pytania: „jak najlepiej to zmierzyć”. Wciąż sprawdzam kilka odpowiedzi, dzięki.
Jak właściwie interpretować powyższe informacje?
Jak dotąd rozumiem:
`TEXT` is program instruction memory
`DATA` is variables (unitialised?) in program memory
`BSS` is variables occupying RAM
skoro BSS ma znacznie mniej niż 1024 bajty, dlaczego drugi działa, a pierwszy nie? Jeśli tak, DATA+BSS
oba zajmują więcej niż 1024.
reedycja: Zredagowałem pytanie, aby dołączyć kod, ale teraz go usunąłem, ponieważ tak naprawdę nie miało to nic wspólnego z problemem (poza może złymi praktykami kodowania, deklaracjami zmiennych i tym podobnymi). Możesz przejrzeć kod, przeglądając wprowadzone zmiany, jeśli naprawdę chcesz go zobaczyć. Chciałem wrócić do pytania, które było bardziej oparte na: Jak zmierzyć zużycie pamięci RAM.
String
pisania w swoich programach? Jest to znane z częstego przydzielania i zwalniania pamięci dynamicznej, co może rozdrobnić stertę do punktu, w którym może nie pozostać żadna pamięć.
String
s z powodu narzutu. Z przyjemnością pracuję z tablicami znaków, co powiedziawszy, prawie zawsze definiuję wszystkie moje tablice znaków z ustalonym rozmiarem (w tej chwili mam JEDNĄ tablicę bajtów, która nie jest czysta, ponieważ zmieniam długość zawartości dla różnych rekompilacji.