C-Code maximalen Speicherbedarf berechnen?


20.06.2023, 16:29

EDIT: natürlich mein ich den maximalen Speicherbedarf in bezug auf a und b, sry

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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.

Woher ich das weiß:Berufserfahrung – Softwareentwickler

Jathe677 
Fragesteller
 20.06.2023, 16:48

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 :

void c_function(int32_t x){
	int32_t a[5];
	int32_t b[18];
	if(x >= 0){


	}else{


	}
}

Die Struktur der Funktion ist ja somit glaube ich auch unverändert.

0
BorisG2011  20.06.2023, 16:57
@Jathe677

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.

0

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.