Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
Blatt 3!!! Aufgabe 6
Hallo,
bei der Teilaufgabe b) ist mir die Speichergröße einer Bank einer SPARC CPU nicht bekannt?
Kann mir jemand etwas dazu sagen?
Danke.
Hm, bin gerade über der Aufgabe.
Wikipedia kennt 32 und 64 Bit ( http://de.wikipedia.org/wiki/Sun_SPARC).
Aber wenn ich mir das hinmale,
komme ich bei beiden auf den gleichen Speicherverbrauch.
Habe ich auch schon gesehn. Gibts hier einen Tutor, der uns die Frage beantworten kann?
PS: Hab mal eine Mail geschrieben. Werde berichten…
Benutze ich 64Bit also 8Byte, so ist Teilaufgabe a) und Teilaufgabe b) identisch, da sich die Variablen super einbetten, wenn ich diese nacheinander einfüge.
Benutze ich 32Bit also 4Byte, so sehe ich die Probleme.
Also vermute ich mal, dass 32Bit Speicher verwendet werden sollen.
nö, sehe ich nicht so, ist nicht identisch.
Bei 8 Byte würden ohne Alignement zwar gerade c1 bis c2 zusammen in eine Zeile passen,
aber das Alignement verlangt ja (sozusagen sicherheitshalber), dass der short x nicht auf dem
2. Byte anfangen darf, sondern erst auf dem 3. Byte.
Und schon hast du eine Lücke zwischen c1 und x.
int y passt dann prima dahinter, dann sind die 8 Byte voll, und c2 wird so in das nächste 8-Byte-Wort gezwungen.
Damit erzeugt das Alignement hier höheren Speicherverbrauch und in diesem konkretem Fall auch langsameres Auslesen als ohne Alignement nötig,
aber lieber das als zu riskieren z.B. später eine Folge von 1000 double-Werten zu haben, die alle mangels Alignement über die Wort-Grenzen umbrechen.
Deshalb Alignement auf Teufel komm raus, auch wenn’s im konkreten Einzelfall mal eher schädlich ist.
Hallo,
in der Regel gehen wir von 32-Bit-Systemen aus, ausser etwas anderes ist explizit gegeben. Die Tatsache, dass der Integer eine Groesse von 4 Byte hat, zeigt dies eigentlich auch.
Hier ist es aber irrelevant, es sollen ja nur die Variablen aligned abgelegt werden.
Zur Erinnerung: Alignment ist erfuellt, falls Adresse mod sizeof(Var) = 0. Nicht mehr und nicht weniger.
Auch auf 64-Bit Systemen kann ein Integer 4 Byte haben:
#include <stdio.h>
int main(int argc, char **argv) {
printf("%zu\n", sizeof(int));
return 0;
}
$ gcc test.c
$ file a.out
a.out: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), [...]
$ ./a.out
4
$
Danke seth~
Jetzt hab ichs verstanden: Speichergröße egal → Nur Alignmentregel beachten → Adressen aufschreiben → fertig