Ich möchte die Größe eines zugewiesenen Puffers unter Verwendung von calloc
in byte
wissen. Durch die Prüfung im Anschluss an den in meiner Maschine:Ermitteln Sie die Größe des im Heap zugewiesenen Puffers
double *buf = (double *) calloc(5, sizeof(double));
printf("%zu \n", sizeof(buf));
Das Ergebnis war 8, selbst wenn ich nur ein Element ändern noch ich 8. Meine Fragen bekommen sind:
- Bedeutet es, dass kann ich nur vermehren 8 * 5, um die Puffergröße in Byte zu erhalten? (Ich dachte,
sizeof
wird 40 zurückgeben). - Wie kann man ein Makro machen, das die Größe des Puffers in Byte zurückgibt (der zu überprüfende Puffer könnte
char
,int
,double
oderfloat
sein)?
Alle Ideen sind willkommen.
Calloc() ruft malloc(), malloc.c ist über 5.322 Zeilen Code, so ist es nicht trivial, aber (ohne Nachforschungen) Ich glaube, dass es einen Zählwert kurz vor dem Start des Puffers gibt.Dies ist für mich sinnvoll, weil free() nichts über die von Calloc verwendeten Parameter weiß() – Marichyasana
@Marichyasana Ihr Kommentar isn ' t über [tag: c], es ist über * einige * (hypothetische?) Implementation. Die Implementierung ist frei zu wählen, wie die Informationen für 'free()' arbeiten zu speichern. Ein dediziertes Größenfeld ist nicht notwendig, in Tatsache ist, dass wahrscheinlich nur ein Zeiger auf den nächsten Block einfacher ist.Natürlich könnten Sie Ihren eigenen Ersatz 'malloc()' implementieren, der auch eine Funktion 'sizeOfChunk()' bietet, aber das würde sei eine * Erweiterung * der Sprache. Und, sinnlos, weiß das Programm, das einen Chunk * zuweist, * die Größe (es hat es der Zuordnungsfunktion übergeben). –