2016-05-11 9 views
-1

Korrigieren Sie mich, wenn ich falsch bin, aber tutWas ist die Größe von (1), und unterscheidet es sich von 1?

malloc(1) // Mallocing 1 which is a int 

gleich

malloc(sizeof(1)) 
+4

Ich möchte darauf hinweisen, dass der Titel und der Körper dieser Frage unterschiedlich sind – vu1p3n0x

+0

Ist die Frage im Titel auf den Text im Körper bezogen? Bitte teile solche Fragen nicht auf und lege die * ganze * Frage in den eigentlichen Text. –

+0

in Ordnung ich habe das ganze umformuliert q – Pyrons

Antwort

4

void* malloc(size_t) einen Zeiger zurückgibt, und der Speicher nach dem Zeiger hat mit einer Größe gleich dem Argument in malloc gefüttert zugeordnet. In Ihrem Fall weist malloc(1) einfach ein einzelnes Byte zu, während malloc(sizeof(int)) 2 oder 4 Bytes zuweist.

malloc(sizeof(1)) und malloc(sizeof(int)) sind äquivalente Aussagen, aber das letztere ist offensichtlicher. Daher entspricht malloc(1) nicht malloc(sizeof(1)) als sizeof(1) == 4. (Oder manchmal 2, 8)

+0

Ich glaube nicht, dass das OP '==' wörtlich – vu1p3n0x

+0

in einer 64-Bit-Architektur bedeutet, wenn für 64Bits kompiliert wird, Diese Zeile: 'malloc (sizeof (int))' gibt einen Zeiger auf 8 Bytes zurück, der sich im "Heap" befindet. I.E. 'malloc()' gibt immer einen Zeiger zurück, wenn die Operation fehlgeschlagen ist, gibt es NULL zurück. Der Typ des Zeigers ist: 'void *', Die tatsächliche Länge des zugewiesenen Speichers hängt von der zugrundeliegenden Architektur ab. – user3629249

+1

@ user3629249 Es ist schwieriger, ein System zu finden, in dem 'sizeof (int) == 8' wahr ist, als Systeme zu finden, bei denen' sizeof (int) == 2' wahr ist. Alle modernen Heim-PC-Systeme, 64 oder 32 Bits, haben alle eine Größe von (sizeof (int) == 4). –

3

Die Größe einer Integer-Konstante hängt vom Wert der Konstante und von einem möglichen Suffix ab. Ganzzahlige Konstanten sind mindestens des Typs int wenn es in einem int passt, wenn der Wert der Konstante größer ist und passen nicht in einem int dann long oder long long verwendet werden. Die Konstante 1 ist klein genug, um in eine int zu passen, also ist sizeof(1) == sizeof(int) wahr.

Allerdings wird malloc(sizeof(1)) == malloc(sizeof(int)) wird nicht wahr sein, da Sie zwei verschiedene Speicherbereiche zuweisen und jeder Aufruf verschiedene Zeiger zurückgibt. Die Größen dieser Speicherbereiche werden identisch sein, aber nicht die Zeiger, die von malloc zurückgegeben werden. Die Ausnahme ist, wenn beide Aufrufe malloc fehlschlagen und NULL zurückgeben.

Ich weiß, dass Sie wahrscheinlich nicht den Vergleich der malloc Anrufe buchstäblich meinen, aber in der Programmierung solche Dinge sind wichtig zu buchstabieren. Semantik ist sehr wichtig.

Was die Frage in Ihrem Titel betrifft, gibt malloc(1) einen Zeiger auf ein einzelnes Byte zurück.

Seien Sie auch vorsichtig bei der Annahme von Größen, denn sizeof(int) kann eigentlich nicht sein vier Bytes. Auf kleinen eingebetteten Plattformen (oder sehr alten Systemen) könnte es zwei Bytes sein. Und auf zukünftigen Systemen könnte es acht oder mehr sein.

Sie möchten vielleicht z. this malloc reference, wo es heißt, dass das Argument ist die Anzahl der Bytes zuweisen.

+0

also malloc (1) reserviert 1 Byte? – Pyrons

+0

@Pyrons In der Realität werden am wahrscheinlichsten mehr zugewiesen, aber Sie können es nicht so behandeln, als ob mehr zugewiesen würde, da dies die Regeln der C-Spezifikation verletzen würde. Wenn Sie ein Byte zuweisen, sollten Sie den zurückgegebenen Zeiger als Zeiger auf ein einzelnes Byte behandeln. –

+0

@Pyron: Ja. 'malloc (1)' weist 1 Byte zu. –

-1

Wenn Sie Ihre eigene Art wie folgt definiert: UINT8 (1 Byte) UINT16 (2 Byte) UINT32 (4 Byte) so, sizeof(UINT8) = 1 sizeof(UINT16) = 2 sizeof(UINT32) = 4 so, wenn in Ihrem Code "1" ist der Typ "int", sizeof(1) = 4 (oder2), so, sizeof (1)!= 1

0

Integer-Konstanten wie 1 haben ihren eigenen Typ, genau wie Variablen. In diesem Fall int.

Das bedeutet, dass sizeof(1) entspricht sizeof(int).

Also malloc(1) bedeutet "1 Byte zuordnen", während malloc(sizeof(1)) bedeutet, so viele Bytes wie die Größe eines int zuweisen.

Verwandte Themen