Frage

Was ist der Zweck der Verwendung? sizeof verwenden malloc In C?Warum ist es notwendig?

Ich meine, wir können es gebrauchen sizeof Aber wir kennen bereits die Größe (= 1000 Bytes), die wir im Speicher zuweisen?

Ich bin Anfänger in C, also.Dies könnte eine sehr offensichtliche Frage sein.

War es hilfreich?

Lösung

Datentypen und Speichermaterie

Die Antwort liegt in den Datentypen.Während Sie wissen wie viele Objekte Sie möchten Speicher reservieren, aber Sie möchten sich vielleicht nicht die Mühe machen, ihre Größe im Kopf zu berechnen.

Das Gleiche gilt für die Wartbarkeit

Und was passiert, wenn sich die Zusammensetzung dieser Stoffe später ändert?Dann bist du am Arsch und musst alles bearbeiten.

Das ist in Ihrem Beispiel also ohne Kontext irrelevant.Wenn Sie jedoch Speicher für komplexere Dinge reservieren möchten (z. B. eine Struktur mit mehreren Feldern), ist dies durchaus wichtig und nützlich.

Beispiel 1 (hier nicht so wichtig):

char *s = malloc(100 * sizeof(char));

Aber hey, es ist einfach so chars, es ist in Ordnung, du hättest das tun können:

char *s = malloc(100);

Funktioniert grundsätzlich.Aber Sie schießen sich selbst ins Bein, wie Sie weiter unten sehen werden.

Beispiel 2 (ist schon ein bisschen wichtig):

int *i = malloc(100 * sizeof(int));

Klar hättest du das schreiben können:

int *i = malloc(100 * 4);

Das heißt, vorausgesetzt, Sie entwickeln nur für eine Architektur, die Sie ziemlich gut kennen.

Beispiel 3 (fängt an, ziemlich wichtig zu sein!):

typedef struct s_listelement{
    int                  dataitem;
    struct s_listelement *link;
}              t_listelement;

t_listement *le = malloc(sizeof(t_listelement));

Stellen Sie sich nun vor, dass die Struktur des verknüpften Listenelements eine Reihe anderer Felder enthält ...

Möchten Sie vertrauen? sizeof(), oder Spaß haben und selbst rechnen?

Andere Tipps

Angenommen, Sie möchten Speicher zum Speichern zuweisen intS.Ihre erste Vermutung wird sein: Okay, das muss ich haben n Ganzzahlen und jede Ganzzahl erfordert x Bytes.So wird der Raum sein n*x Bytes.

Aber eigentlich das x hängt von der Architektur ab.Es kann 16 Bit, 32 Bit usw. sein.Damit Ihr Code in verschiedenen Umgebungen funktioniert, wird die Verwendung empfohlen n*sizeof(int) anstatt n*x.

Wenn Sie beispielsweise Platz für 10 ganze Zahlen reservieren müssen:

int *p=malloc(sizeof(int)*10);

Was passiert, wenn Sie die Größe ändern? mallocated?

Sie müssen 1) die neue Größe erneut berechnen (von Problemen mit mehreren Zielarchitekturen abgesehen, bei denen Sie die neue Größe in jedem Ziel berechnen müssen), 2) nach allen suchen malloc(1000), stellen Sie sicher, dass es sich darauf bezieht mallocated (was möglicherweise nicht offensichtlich ist) und durch eine neue Größe ersetzen.

Sie haben keines dieser beiden Probleme bei der Verwendung sizeof.So verwenden sizeof führt zu einem besser wartbaren und lesbaren Code.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top