2017-12-22 2 views
0

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?

+0

Sie definieren auch, welche Operationen für die Werte im Speicher verfügbar sind und wie sie ausgeführt werden. – StoryTeller

+0

C/C++ existiert nicht. –

Antwort

3

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.

+0

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

+1

'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

Verwandte Themen