Oszacować średnią długość list po wstawieniu m elementów, zakładając że f(w) przyjmuje losowe wartości, niezależne i równo rozłożone w przedziale 1..N. Porównać oczekiwaną liczbę operacji i zajętość pamięci przy wyszukiwaniu w tabeli mieszającej i w drzewie binarnym.
Mamy następujące deklaracje struktur:
struct { char c; long l; short s; int i;} st1; struct { long l; short s; char c;} st2;
Jak będzie wyglądało ich rozmieszczenie w pamięci zakładając że 2-bajtowe short i 4-bajtowe int i long oraz że short, int i long muszą być przechowywane pod adresami podzielnymi przez 2. Jak to się zmieni jeśli int i long muszą być przechowywane pod adresami podzielnymi przez 4. Jak to się zmieni jeśli long jest 8-bajtowy i musi być przechowywany pod adresami podzielnymi przez 8.
class c1 { virtual void m1(); virtual void m2(); virtual void m3(); }; class c2:c1 { virtual void m4(); }; class c3:c2 { virtual void m5(); };Zakładamy że klasa c1 definuje wszystkie swoje metody, klasa c2 definuje m2 i m4, zaś c3 defunuje m3, m4 i m5. Jak będą wyglądały table metod wirtualnych dla c1, c2 i c3. Zakładając że m1 wywołuje m2 i m3 które wersje metod będą wywoływane przez o.m1() dla o będącego odpowienio klasy c1, klasy c2 i klasy c3?
Rozważmy następującą deklarację w C:
struct { struct { int i1; char c1; } s1[3]; int i2; struct { int i2; char * str1; } s2; } s3[5];Jak będzie ona rozmieszczona w pamięci, zakładając 4-bajtowe int, 8-bajtowe wskaźniki i wyrównywanie int do 4 zaś wskaźników do 8. Jak by się ona zmnieniła gdyby C miało semantykę referencyjną dla struktur i tablic (tzn. struktur i tablic jako elementy większych części byłby reprezentowane przez adresy, zaś faktyczne dane byłyby pamiętane oddzielnie). Jak by wyglądało rozmieszczenie w pamięci jeśli oprócz semantyki referencyjnej elementy struktur i tablic zajmowałyby pełne 8-bajtowe słowa (czyli in i char zastałyby powiększone do słowa), przy tym struktury dostały nagłówek z jednego słowa zaś tablice nagłówek z dwu słów (pierwsze identyfikowałoby typ tablicy a drugie dawałoby jej rozmiar). Zakładamy że maszyna posiada wystarczająco dużo dostępnych (wolnych) rejestrów r1, r2, r3, ... i instrukcje 'ldb', 'ldi', 'ldw' o składni 'ldw [ri], rj' które odczytują zawartość dane pod adresem z rejestru ri i umieszczają go w rejestrze rj. Przy tym 'ldw' odczytuje słowo, 'ldi' odczytuje 4-bajtową liczbę całkowitą zaś 'ldb' odczutuje znak (bajt). Dodatkowo maszyna ma instruję 'add stała, ri' która dodaje stałą do rejestru ri. Jak wyglądają sekwencje instrukcji umieszczające w rejestrze r2 wartość s3[2].s1[1].c1 dla poszczególnych wariantów (C, referencyjne C, referencyjne C z wartościami zajmującymi słowa i z nagłówkami). We wszystkich przypadkach zakładamy że w rejestrze r1 znajduje się adres początku struktury s3 i że można go nadpisać w trakcie obliczenia.