Ich habe versucht, meinen Kopf darüber zu wickeln, wie C/C++ Code im Maschinencode dargestellt wird und ich habe Schwierigkeiten zu verstehen, welche Datentypen tatsächlich sind, abgesehen von einer Bezeichnung der Speicherlänge.Was ist der Unterschied zwischen Datentypen neben der Länge im Speicher?
Antwort
Typen sind auch zugeordnet;
- eine Reihe von Werten, die alle Variablen dieses Typs darstellen können;
- das Layout im Speicher dieses Typs (z. B. die Bedeutung, falls vorhanden, an jedes Bit oder Byte, das eine Variable darstellt),
- die Menge von Operationen, die auf eine Variable wirken können;
- das Verhalten dieser Operationen.
Typen werden nicht unbedingt direkt im Maschinencode dargestellt. Ein Compiler sendet eine Reihe von Anweisungen und Daten (in einer Weise, die zwischen Zielplattformen variiert), die Speicher- und Maschinenregister manipulieren. Der Typ jeder Variablen in C source gibt dem Compiler Informationen darüber, welcher Speicher dafür zuzuordnen ist, und der Compiler trifft Entscheidungen für die Zuordnung zwischen Ausdrücken (in C-Anweisungen) und die Verwendung von Registern und Maschinenanweisungen, um die erforderlichen Effekte zu erzielen.
Können Sie Beispiele mit Typen derselben Länge hinzufügen, die ein anderes Verhalten haben, wenn sie im Code synonym verwendet werden, und erklären, was passiert, um das unterschiedliche Verhalten zu verursachen? – user2462027
'unsigned' und' int' sind (auf jeder angegebenen Zielmaschine) gleich groß, repräsentieren aber eine andere Menge von Werten (ein 'unsigned' kann keine negativen Werte darstellen, ein' int' tut dies). Das Überstreichen eines "unsigned" verwendet Modulo-Arithmetik (z. B. wird ein Ergebnis von -1 um den Maximalwert gewickelt, den ein nicht vorzeichenbehaftetes Symbol auf dem Zielcomputer darstellen kann), während das Überlaufen eines int-Wertes zu undefiniertem Verhalten führt ein "int" DO variiert zwischen Compilern, sogar zwischen zwei Compilern, die "int" die gleiche Größe haben. So spezifiziert der Standard sie. – Peter
- 1. Was ist der Unterschied zwischen "Hallo". Länge und "Hallo". Länge?
- 2. Was ist der Unterschied zwischen den Datentypen bei der Bezugnahme auf den Speicher?
- 3. Was ist der Unterschied zwischen Datentypen und Literalen in Java?
- 4. Was ist der Unterschied zwischen primitiven und Wrapper-Datentypen und was ist der Wrapper-Datentyp?
- 5. Was ist der Unterschied zwischen:
- 6. Was ist der Unterschied zwischen reserviertem und festem Speicher?
- 7. Was ist der Unterschied zwischen Heap- und Swap-Speicher?
- 8. Was ist der Unterschied zwischen zusammenhängenden und kontinuierlichen Speicher
- 9. Was ist der Unterschied zwischen node.js Puffer und WebAssembly-Speicher?
- 10. Im Android-Speicher-Monitor, was ist der Unterschied zwischen `total count` und` heap count`?
- 11. Was ist der Unterschied zwischen __builtin_popcountll und_mm_popcnt_u64?
- 12. Was ist der Unterschied zwischen `==` und `ist`?
- 13. Was ist der Unterschied zwischen + = und = +?
- 14. Was ist der Unterschied zwischen $ (...) und `...`
- 15. Was ist der Unterschied zwischen:.! und: r !?
- 16. Was ist der Unterschied zwischen diesen beiden?
- 17. Was ist der Unterschied zwischen der zugeordneten Region und der nicht zugeordneten Region im Speicherbereich?
- 18. Was ist der Unterschied zwischen map und apply im Schema?
- 19. Was ist der Unterschied zwischen -I und -L im Makefile?
- 20. Was ist der Unterschied zwischen Anfrage- und Sitzungsumfang im Frühling?
- 21. Was ist der Unterschied zwischen 'it' und 'test' im Scherz?
- 22. Was ist der Unterschied zwischen Beenden und Beenden im Bienenstock?
- 23. Was ist der Unterschied zwischen ResponseEntity und HttpEntity im Frühling?
- 24. Was ist der Unterschied zwischen didselectrowindexpath und willselectrowindexpath im iphone?
- 25. Was ist der Unterschied zwischen Fehler, stderr, stdout im Knoten
- 26. Was ist der Unterschied zwischen irgendwelchen und * im Fluss?
- 27. Was ist der Unterschied zwischen String und Stringbuilder im Code?
- 28. Was ist der Unterschied zwischen @ Bind und @ BindView im Buttermesser?
- 29. Was ist der Unterschied zwischen sampled_softmax_loss und nce_loss im Tensorflow?
- 30. Was ist der Unterschied zwischen/* und/** -Muster im Spring Boot?
Sie definieren auch, welche Operationen für die Werte im Speicher verfügbar sind und wie sie ausgeführt werden. – StoryTeller
C/C++ existiert nicht. –