Tworzę program c, który zamierzam uruchomić na procesorze ARM w najbliższym czasie. Chcę zmierzyć ilość pamięci używanej przez moje zmienne globalne, ignorując rozmiar stosu/sterty. Czy jest jakiś sposób, aby uzyskać GCC, aby zrzucić to w czasie kompilacji lub odzyskać te informacje ze skompilowanego pliku binarnego?Jak zmierzyć całkowity rozmiar moich zmiennych globalnych?
Odpowiedz
Świetnym sposobem na sprawdzenie, gdzie jest twoja pamięć, jest spojrzenie na mapę linkera. Mapa linkera jest plikiem wygenerowanym przez linker i zawiera szczegółowe informacje o wszystkich lokalizacjach pamięci programu. Możesz zobaczyć alokację pamięci dla symbolu za symbol dla zmiennych globalnych, jak również kodu. W przeszłości korzystałem z map linkerów dla projektów, które mają małe wymagania dotyczące pamięci. Ułatwiają identyfikację problemów takich jak globalne bufory pamięci, które zajmują dużo miejsca.
Dodaj tę opcję do linii poleceń gcc wygenerować mapę łącznikową:
-Wl, -map = output.map
Zestaw GNU binutils zawiera program o nazwie "rozmiar", który jest najłatwiejszym sposobem uzyskania potrzebnych danych - lub przynajmniej rozsądnego przybliżenia. Dla typowego programu (w tym przypadku, a nie mały wbudowany jeden), wyjście może wyglądać następująco:
text data bss dec hex filename
332268 2200 19376 353844 56634 test-directory/add
Pierwsze trzy kolumny są rozmiary sekcjach binarne: „tekst” jest kod wykonywalny, "dane" to stałe i tak dalej - w tym te, które reprezentują zmienne początkowe z jawnymi inicjalizatorami - a "bss" to inicjatory dla wszystkiego, co zostaje domyślnie zainicjalizowane statycznie. W typowym programie wbudowanym te inicjatory statyczne są w zasadzie wyłącznie dla zmiennych globalnych (i, dla twoich celów, możesz chcieć uwzględnić inne zmienne statyczne w twoim pomiarze mimo to, że nie są one również na stosie lub stercie).
W związku z tym wydaje mi się, że otrzymujesz sumę "danych" i "bss" w istocie, czego chcesz. (Po przeczytaniu artykułu związanego z Hlovdal, jestem mniej pewny tego niż ja, może komentujący mogą dodać potwierdzenie?)
(Po tym, "dec" i "hex" są całkowitą wielkością wszystkiego w systemie dziesiętnym i szesnastkowo, a "nazwa pliku" jest oczywiście oczywista.)
- 1. Jak zmierzyć całkowity czas spędzony w funkcji?
- 2. W jaki sposób mogę zapobiec kompilacji moich "nieużywanych" zmiennych globalnych?
- 3. Jak zmierzyć rozmiar stosu procesu?
- 4. Zestaw globalnych zmiennych kątomierza
- 5. Używanie zmiennych globalnych między plikami?
- 6. Jak obliczyć całkowity rozmiar obiektu NSDictionary?
- 7. Jak uzyskać całkowity rozmiar pamięci RAM urządzenia?
- 8. Definiowanie zmiennych globalnych w MPI
- 9. Ustawianie zmiennych globalnych w VBA
- 10. Częstotliwość zmiennych globalnych w python?
- 11. Dezorientacja zmiennych globalnych w pytonie
- 12. Jak nie używać zmiennych globalnych w c
- 13. .NET framework 4 całkowity rozmiar wdrożenia aplikacji
- 14. Safari 6 Całkowity rozmiar strony (kb)
- 15. przypisanie destructuring w maszynopisie dla zmiennych globalnych
- 16. prawidłowe stosowanie zmiennych globalnych W Pythonie 3
- 17. sposób ustawiania globalnych zmiennych stałych w pythonie
- 18. Lista wszystkich zmiennych globalnych w pliku Node.js
- 19. Uzyskiwanie dostępu/przechwytywanie globalnych zmiennych obiektu Nashorn
- 20. Python - Najprostszy sposób definiowania wielu zmiennych globalnych
- 21. Tworzenie zmiennych globalnych w projekcie Grails
- 22. Definiowanie list jako zmiennych globalnych w Pythonie
- 23. Scalanie R: blokowanie zmiennych globalnych w funkcji
- 24. Wykrywanie wszystkich zmiennych globalnych w funkcji Pythona?
- 25. Jak uzyskać całkowity rozmiar pamięci html5 używanej przez bieżącą aplikację
- 26. Jak obliczyć całkowity rozmiar niektórych plików tylko, rekurencyjnych, w linux
- 27. Jak zmierzyć rozmiar tabeli w GB w tabeli w SQL
- 28. Jak zmierzyć rozmiar obiektu TextBlock w WPF przed renderowaniem?
- 29. Jak mogę zmierzyć Rozmiar tekstu w aplikacjach UWP?
- 30. Jaki jest najlepszy sposób tworzenia zmiennych globalnych w CakePHP?