malloc richtige Syntax und max. Größe
-
In meinem Buch "Jetzt lerne ich C" wird die Funktion
folg. genutzt:
p=malloc(sizeof(struct));In anderen Büchern habe ich gesehen, das der Rückgabewert expliziet in einen Zeiger vom Typ int gewandelt wird. So wie in den meisten Threads. Ist das notwendig oder nur eine korrektere schreibweise?
p=(int *)malloc(sizeof(int));
Desweiteren steht in dem o.g. Buch, dass die Maxlänge 50000Byte beträgt. In anderen Beiträgen habe ich schon was von 512 MB gelesen?!
Muss ich das Buch nun doch entsorgen? Ich bin leider schon komplett durch.
PS: In allen Büchern ist main noch void. Aber die Lüge hat Shade ja in seinem Tutorial schon in der Luft zerrissen.
-
plc_tippser schrieb:
In anderen Büchern habe ich gesehen, das der Rückgabewert expliziet in einen Zeiger vom Typ int gewandelt wird. So wie in den meisten Threads. Ist das notwendig oder nur eine korrektere schreibweise?
p=(int *)malloc(sizeof(int));
Das Casten ist nicht nur überflüssig, sondern verdeckt auch möglicherweise Fehler (z.B., wenn Du vergessen hast, die stdlib.h einzubinden).
Desweiteren steht in dem o.g. Buch, dass die Maxlänge 50000Byte beträgt. In anderen Beiträgen habe ich schon was von 512 MB gelesen?!
Die Maximallänge hängt praktisch nur davon ab, was für Programme Du erstellst. Unter DOS konnte man ohne Tricks halt nur 64kiB an Stück bekommen. Heutzutage gilt das natürlich nicht mehr, da kann man sich theoretisch bis zu 2GiB holen.
-
Habe leider nicht genug Speicher um einmal über 2GB zu testen, aber dachte man kann
bis zu 4GB (unter winnt), oder täusch ich mich da?
-
SirLant schrieb:
Habe leider nicht genug Speicher um einmal über 2GB zu testen,
Mach einfach, dann swappts halt. Zum ausprobieren reichts.
aber dachte man kann bis zu 4GB (unter winnt), oder täusch ich mich da?
Ne, an den Adressraum des Kernels kommst Du nicht ran. Und das sind unter 'nem default-NT die oberen 2GiB (mit /3GB-Parameter auch nur das obere GiB, aber das macht man eigentlich nur bei Servern)
-
zu 1:
Ich hab nur 2GB mit Swap, hat bei mir ne fixe Größe, sonst wäre es ja kein Problem.zu 2:
Danke für die Aufklärung