Tut sizeof(float) immer gleich sizeof(int) auf allen Architekturen?
Bin ich zu sehen-code zuweisen von Speicher für Schwimmer mit sizeof(int)
.
Ich Frage mich, ob sizeof(float)
immer gleich sizeof(int)
auf allen Architekturen?
float *pointer2Float = (float *) USER_DEFINED_MALLOC (...,..., sizeof(int))
Hinweis: diese USER_DEFINED_MALLOC
isa-wrapper für konventionelle malloc, denke ich.
Dank
Hinsichtlich
- Sollte man gar nicht erst zu kümmern. Wenn Sie reservieren, ein schweben, verwenden Sie die Größe einer float. Außerdem
sizeof(*ptr)
sollte verwendet werden, anstelle vonsizeof(int)
sowieso. - Nein - es sind 64-bit-Plattformen, die
ILP64
, wo int 8 bytes, aber schwimmen ist noch immer 4 bytes. Es gibt auch 16-bit-Plattformen, wo int ist 2 Byte und float sind immer noch 4 Byte. - Denken Sie auch daran, dass die Datentypen sind nicht gebunden an eine Architektur. Sie sind definiert durch eine beliebige Daten-Modell, und technisch, jeder kann kommen mit einer neuen für jede CPU-Architektur. Die gängigsten Datenmodelle, die auf 64-bit-Plattformen setzen
long
auf 64 bit undint
bei 32 bit, aber das ist nur, weil es bequem ist, nicht weil einige technische Einschränkung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, es gibt Implementierungen (hauptsächlich embedded systems) mit 16-bit -
int
-und 32-bit -float
.Und natürlich, die Größen sind erlaubt, ganz anders nach der standard.
sizeof(int)==sizeof(float)
, aber wäre es nicht theoretisch unmöglich ist, ein bestimmtes system, für das es nicht der Fall ist (zum Beispielint
könnte leicht sein, 64 bit).int
-und 32-bit -float
ich denke, die Gefahr, dass Sie verlieren, die Wette ist extrem klein. Aber es gibt keine Garantie, jemand könnte eine Implementierung mit 64-bit -int
-und 32-bit -float
es einfach nur da.Größen ALLER Arten (außer
char
,signed char
undunsigned char
1) sind durch die Implementierung festgelegt. So ist es nicht garantiert, dasssizeof(float)
wird gleichsizeof(int)
auf alle Plattformen.1 ist. Die Größe der
char
und alle seine Varianten ist definiert als 1-byte der Norm. Jedoch, die Anzahl von bits in der 1-byte wird durch die Implementierung festgelegt!Nein,
sizeof (int)
undsizeof (float)
Werte sind durch die Implementierung festgelegt und werden nicht unbedingt die gleichen.Hier ist ein Beispiel des Systems, wo die beiden Werte unterschiedlich sind:
Auf Cray-MPP-Systeme:
Siehe hier:
http://docs.cray.com/books/004-2179-003/004-2179-003-manual.pdf
Auch die meisten 8-bit-embedded-Systeme haben eine
int
von 16 bit Breite mitsizeof (int)
ist 2, während die floating-point-Folgen Sie der IEEE-754 undfloat
sind 32-bit mitsizeof (float)
4.Nicht. In C und C++ - Datentypen sind Plattform-spezifisch. Im Allgemeinen wird dies bedeuten:
(Entnommen aus Datentypen)
Auf vielen Plattformen, float und int sind beide oft mit 32bit, aber dies ist nicht immer der Fall, noch ist es Bestandteil der eigentlichen Spezifikation.
Gibt es absolut keine Garantie, dass
sizeof (float)
gleichsizeof (int)
, und ich betrachten die oben, um einen Codierungsfehler.Es sollte Verwendung
sizeof *ptrToFloat
zu Gunsten von entwedersizeof (int)
odersizeof (float)
.Wenn Sie schreiben ein multi-Plattform, die Größe der Daten-Typ ist sehr wichtig, erstellen Sie eine header-Datei wie :
Es ist ein trick zu betrügen, arch.