Wie finde ich heraus, wie viel Speicherplatz durch einen Aufruf von malloc () zugewiesen wurde?

Ich versuche, eine Größenfunktion wie diese zu schreiben:

size(void *p,int size);

Welche die Größe eines Arrays zurückgeben würde, auf das p zeigt. Beispielsweise

Int *a = malloc((sizeof(int)*100));
size(a,sizeof(int)); // this should return 100

Ich denke, dass dies möglich ist, da malloc, wenn ich mich recht erinnere, den in einigen Header-Bytes zugewiesenen Speicherplatz verfolgt.

Hier ist was ich bisher habe:

int size(void *p, int size)
{
  p = (unsigned int *)p - 1;
  unsigned int elements = (*(unsigned int *)p);
  return elements/size;
}

Nun, vorausgesetzt, die Größe des zugewiesenen Speicherplatzes liegt in den 4 Bytes vor dem Zeiger, sollte dies die Bytes oder den Offset zurückgeben. Hier bin ich etwas im Dunkeln. Ich kann nicht herausfinden, wie Malloc diese Header-Bytes formatiert. Wie packt malloc die Header-Bits?

Danke, ich weiß das zu schätzen. Ich bin mir sicher, dass mit diesem Code etwas nicht stimmt. Er ist nicht besonders portabel und kann sehr systemabhängig sein, aber ich mache ihn zum Spaß.

Antworten auf die Frage(14)

Ihre Antwort auf die Frage