C-Code maximalen Speicherbedarf berechnen?
Hey, also ich hab folgenden C-Code gegeben:
void c_function(int32_t x) {
int32_t *a, *b;
if(x >= 0) {
a = malloc(5 * sizeof *a);
...
} else {
b = malloc(18 * sizeof *b);
...
}
... // evtl. weitere Anweisungen,
// die a oder b betreffen
}
Jetzt komme ich auf 32*5+32*18 = 736 Bits Speicherbedarf , stimmt dies so ?
Gruß
EDIT: natürlich mein ich den maximalen Speicherbedarf in bezug auf a und b, sry
2 Antworten
Die Aufrufe stehen in unterschiedlichen Zweigen einer Fallunterscheidung. Es wird also niemals sowohl an a als auch an b Speicher zugewiesen. Infolge dessen scheint es mir richtig, den Speicherbedarf für jeden Zweig der Fallunterscheidung extra zu berechnen und sodann nicht zusammenzuzählen, sondern den größeren Wert als maximalen Bedarf zu nehmen.
Ja, dann würde deine Rechnung aufgehen: Du erzeugst zwei Arrays und musst den Bedarf beider Arrays addieren.
Wurde euch eigentlich gesagt, dass bei der Speicherreservierung mit malloc zusätzlich zur Größe des angeforderten Speichers einige Byte für Verwaltungszwecke reserviert werden? Die Größe dieses zusätzlichen Speichers hängt allerdings von der Rechnerarchitektur ab und ist bei 64-bit-Architekturen etwas größer als bei 32-bit-Systemen. Insofern erwarte ich nicht, dass das bei Schulübungen berücksichtigt wird.
Du hast entweder den einen oder dne anderen Fall, also max (5*sizeof( int32_t *)) ,18*sizeof( int32_t)), was 18*sizeof(int32_t *) ist.
Beachte, daß für die Größe eines int32_t * das Datenmodell relevant ist.
Ah stimmt macht sinn, danke, wenn ich das Programm umschreiben würde, dass es ohne den heap arbeitet , also ohne malloc, dann würde meine Rechnung aufgehen oder ?
Also z.B so :
Die Struktur der Funktion ist ja somit glaube ich auch unverändert.