Oszacowanie pamięci

0

Nie mg nigdzie znaleźć tego pytania pomoże jakiś znawca?
Oszacuj ile pamięci w Java/C++ zajmie lista zawierająca 100 obiektów które zawierają w sobie trzy pola, typu short, boolean/bool oraz byte/char.

0
  1. Między Javą i C++ prawdopodobnie są w tym względzie są duże rozbieżności, nawet pomiędzy poszczególnymi architekturami/implementacjami. W Javie takie szacowanie może być trudne ze względu na JIT, choć nie jestem pewny, nie znam szczegółów.
  2. W przypadku C++, za pewne różnie będzie w zależności od ustawień kompilatora, przy optymalizacji pod kątem zużycia pamięci pewnie będzie sciskał wszystko nie przejmując się wydajnoscią, w optymaizacji szybkości działania pewnie rozmiar rekordu będzie zawsze wielokrotnością optymalnego rozmiaru dla procesora (w większości współczesnych PC 64 bity, rzadziej 32).
  3. Specyfikacja C++ definiuje rozmiary tych typów? A nie jest tak jak w C, że te rozmiary są zalezne od architektury?
  4. Javę podejrzewałbym o możliwe o branie pod uwagę innych czynników, choćby rozmiaru bloku jeśli struktury są zapisywane na dysku.

dla architektury x64 short = 2B, boolean = 1B??, char = 1B. w sumie 4 bajty. Tak więc bez optymalizacji będzie 400 bajtów. Wysoce prawopodobne jednak że zostanie dodane wypełnienie do 8 bajtów, więc 800 bajtów. Na architekturze 32-bitowej jak się zdaje rozmiar akurat, więc bez wypełnień.

Myślę, że warto zrobić eksperyment. W C++ możesz użyć operatora sizeof() żeby sprawdzić rozmair obiektu/tablicy, Ciężej w Javie. Tu jest co na ten temat: https://stackoverflow.com/questions/2370288/is-there-any-sizeof-like-method-in-java

0

W Javie lista to interfejs, a więc wymóg. Wymóg ten spełniają konkretne implementacje, i tylko takie można zainstancjonować (utworzyć).
Ile pamięci zajmuje == ile zajmuje obiekt czyli ile zajmują jego pola (dla pól prostych masz z góry znaną wartość, dla pól obiektowych masz z góry znaną wartość kosztu pamiętania referencji, zaś do samego obiektu w tym polu stosujesz rekurencję).

0
Andar1 napisał(a):

Nie mg nigdzie znaleźć tego pytania pomoże jakiś znawca?
Oszacuj ile pamięci w Java/C++ zajmie lista zawierająca 100 obiektów które zawierają w sobie trzy pola, typu short, boolean/bool oraz byte/char.

W C++ jest to w miarę proste: https://wandbox.org/permlink/iFk9BY0LyhBdamAJ.

Jeśli chodzi o Javę to liczba czynników które na to wpływają jest tak duża, że nie wiem czy to ma sens.W zależności od GC, maszyny wirtualnej czy nawet rozmiaru sterty (powyżej 32 GB przestają działać CompressedOops) wyniki mogą się różnić diametralnie

1 użytkowników online, w tym zalogowanych: 0, gości: 1