Zadanie z teorii - obliczanie pamięci

0

Odnawiam wątek, potrzebuję pomocy w znalezieniu sposobu rozwiązywania tego typu zadań. Dodatkowo potrzebuję tutoriala ze wskaźnikami i jakimiś zadaniami testowymi. Co możecie mi polecić?
Odnośnie zarzutów dotyczących ilości zajmowanej pamięci przez poszczególne dane - ja tego nie wymyślam, to jest zadanie czysto teoretyczne

2d93ad390e.png
821b406375.png

0

Ok, wystawię się na próbę. Nie jestem pewien co do moich odpowiedzi, ciekawi mnie czy sam to rozumiem :P

do 1) p1 = 4210799 p2 = 4210801
do 2) p1 = 4210800 p2 = 4210802
do 4) p1 = 4210800 p2 = 4210804

  1. edit: liczyłem floata jako 2B, stąd złe wyniki. Poprawione.
    a) 13 B 14 B
    b) 14 B 16 B
    c) 16 B 20 B

do 1) p = q = 103
do 2) p = q = 104
do 4) p = q = 104

Jak moje odpowiedzi okażą się poprawne, odpowiem na Twoje pytania :)

0

Mam gotowca tylko do 13 i 14

a) 14
b) 16
c) 20

  1. zgadza się z twoimi
0

Co do alignów pamięci, podrzucę dwa linki:
http://msdn.microsoft.com/pl-pl/library/83ythb65.aspx
http://www.ibm.com/developerworks/library/pa-dalign/

Co do wskaźników... musisz poczytać czym jest wskaźnik, pobawić się sizeof'ami, wyświetlaniem adresów zmiennych, wskaźników. A gdzie poczytać o wskaźnikach, hmm... ciężko mi stwierdzić, mi wystarczyła dawno temu symfonia do zrozumienia tego zagadnienia, a potem to już tylko styczność z tematem na forach, stackoverflow itp.

EDIT: Omg, dobra, już wiem czemu mam źle. Nie wiem czemu ale liczyłem w 13 zadaniu floata jako 2B, pomyłka :D

A jak czegoś konkretnego nie rozumiesz, to pytaj śmiało ;)

0

Jak dla mnie to zadanie wciąż nie ma sensu. Alignment to wyrównanie, a nie "dokładność". Ale nawet jeśli tak to przyjąć, to kompletnym bezsensem jest, aby tak zróżnicowane typy miały identyczny alignment (serio? 1,2,3,4,5 bajtów - wszystkie ten sam alignment - 4?)

0

Też rozkminiałem o co chodzi z tą "dokładnością", bo ni za cholerę to nie brzmi jak wyrównanie komórek w pamięci. Ale w 13 zadania jest "przy ułożeniu(znowu, co to jest ułożenie...) z dokładnością" więc można to jakoś wywnioskować. Nie wiem kto układał te testy, ale powinien najpierw sam się dokształcić.

Poza tym, jaki ma sens podawanie w zadaniach floata jako 3 bajty, double jako 5 bajtów... wtf. Znowu potwierdza się moja teza, że studia nie uczą niczego przydatnego. Wykładają materiał, byle tylko zająć czymś studentów.

0

Przeczytałem to na trzeźwo i nietrzeźwo z mizernym efektem, znalazłem stronkę (http://algorytmy.blox.pl/2008/02/Zabawy-z-sizeof.html), na której jest to zobrazowane. Mimo tego nadal nie rozumiem, pewnie dlatego, że rozmiary są pokręcone.

Zacznijmy od najprostszego, czyli od 13.

int 4, float 3 - wyrównujemy do 8 bajtów(?), double 5, razem daje nam 13. Główkuję i nie mogę się dopatrzeć co robię źle, tym bardziej, że Shakaz zrobił na początku zupełnie inny błąd

0

Mnie się pomyliło z rozmiarem floata w tym zadaniu(nie wiem czemu...) i wyszło mi, że float[3] zajmuje mniej pamięci, niż int[2], stąd mój błąd.
wyrównujemy do 8 bajtów(?) nigdzie nie wyrównujemy do 8 bajtów, skąd to wziąłeś?

Powiedz czego dokładnie nie rozumiesz oraz w jaki sposób główkujesz, postaram się naprowadzić Cię na dobry sposób myślenia.

0

Myślałem, że w unii trzeba wyrównać mniejszego floata do większego inta, ale skoro tak się tego nie robi, to zupełnie tego nie rozumiem. Jest na to jakiś wzór? Mógłbyś sam to wytłumaczyć?

0

Unia ma zawsze wielkość równą jej największemu elementowi oraz alignment elementu z największym alignmentem. Jeśli przyjąć, że "ułożenie z dokładnością do x bajtów" oznacza alignment i tyczy się wszystkich typów, to unia int[2] i float[3] powinna mieć wielkość 12 (3 * float, gdzie z powodu alignmentu nie można ich układać co 3, tylko co 4).

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