Frage

Beim Übergang von 16 auf 32 Bit in den 80er Jahren int war entweder 16 oder 32 Bit.Unter Verwendung der aktuellen 64-Bit-Übergangsnomenklatur verstehe ich, dass es eine ziemlich gleichmäßige Verteilung von ILP32- und LP32-Maschinen gab.Ich glaube, dass man das damals verstanden hat int würde immer der Register- oder Zeigerbreite für eine bestimmte Architektur folgen und so weiter long würde 32 Bit bleiben.

25 Jahre später sehe ich, dass LP64 ziemlich Mainstream ist, aber bis ich auf 64-Bit-Plattformen stieß [meine Entdeckung von Desktop-Linux im Jahr 2007 :)], habe ich immer erwartet, dass IP64 der nächste logische Schritt sein würde.

  1. War dies (LP64) die erwartete Entwicklung für 64bit?
    • Wie funktioniert die char <= short <= int <= long Passt die Beziehung in dieses aufkommende Schema, jeder Plattform, die wir zurücklassen, einen ganzzahligen Typ zuzuordnen?
    • In welcher Beziehung stehen diese Übergangsschemata zur Verwendung von (Ihrer Wahl von {l,u}case) WORD/DWORD auf verschiedenen Plattformen?
    • Einige Bereiche von Windows enthalten noch INT Formulare, die 16bit sind.Wird Windows aus LLP64 herauswachsen oder ist es zu spät?
    • Warum war int beschlossen, dieses Mal zurückgelassen zu werden, im Gegensatz zu während des 32-Bit-Umstiegs?
War es hilfreich?

Lösung

Meiner Meinung nach ist Windows bei der gesamten x64-Umstellung ein Sonderling.Abgesehen davon haben C oder C++ die Integraltypen nie als feste Länge definiert.Ich finde das Ganze int/long/pointer Die Sache ist durchaus verständlich, wenn man es so betrachtet:

  • int:meist 32 Bit lang (Linux, Mac und Windows)
  • long:64 Bit auf Mac und Linux, 32 Bit unter Windows
  • long long:64-Bit auf Mac, Linux und Windows x64
  • (u)intptr_t:genaue Länge des Zeigers (32 auf 32-Bit-, 64 auf 64-Bit-Systemen)

WORD Und DWORD sind hässlich und sollten vermieden werden.Wenn die API Sie dazu zwingt, sie zu verwenden, ersetzen Sie sie DWORD mit DWORD_PTR wenn du es zu tun hast...Na ja, Hinweise.Es war nie richtig, (D)WORD da in erster Linie meiner Meinung nach.

Ich glaube nicht, dass Windows seine Entscheidung jemals ändern wird.Schon zu viel Ärger.

Warum war int zurück gelassen?Warum dreht sich die Venus in die entgegengesetzte Richtung?Die Antwort auf die erste Frage ist gefunden Hier (Ich glaube), das zweite ist etwas komplizierter ;)

Andere Tipps

Anstatt dies als zu betrachten int Da man „zurückgelassen“ wird, sollte man es meiner Meinung nach so betrachten, dass man nicht in der Lage ist, irgendeinen Größentyp zurückzulassen, der möglicherweise benötigt wird.Ich nehme an, Compiler könnten definieren int32_t in Bezug auf einige interne __int32_t Erweiterungstyp, aber da C99 immer noch nicht umfassend unterstützt wird, wäre es für Apps ein großes Problem gewesen, das Fehlen umgehen zu müssen int32_t Definitionen, wenn ihre Build-Systeme unter den Standardtypen keinen 32-Bit-Typ finden konnten.Und einen 32-Bit-Typ haben Ist unerlässlich, unabhängig von Ihrer nativen Wortgröße (z. B. ist es der einzig richtige Typ für Unicode-Codepunktwerte).

Aus dem gleichen Grund wäre es nicht möglich gewesen, es zu machen short 32-Bit und int 64-Bit:Ein 16-Bit-Typ ist für viele Dinge unerlässlich, wobei mir als Erstes die Audioverarbeitung in den Sinn kommt.(Ganz zu schweigen von der hässlichen UTF-16-Besessenheit von Windows/Java.)

Ich glaube wirklich nicht, dass die Übergänge von 16 auf 32 Bit und von 32 auf 64 Bit überhaupt vergleichbar sind.Der Verzicht auf 16-Bit bedeutete den Verzicht auf ein System, in dem die meisten im alltäglichen Leben vorkommenden Zahlen nicht in einen Grundtyp passen würden und in dem Hacks wie „Far“-Zeiger verwendet werden mussten, um mit nichttrivialen Datensätzen zu arbeiten.Andererseits benötigen die meisten Anwendungen nur minimale 64-Bit-Typen.Große Geldbeträge, Multimedia-Dateigrößen/-Offsets, Festplattenpositionen, High-End-Datenbanken, speicherzugeordneter Zugriff auf große Dateien usw.Mir fallen einige spezielle Anwendungen ein, aber es gibt keinen Grund zu der Annahme, dass ein Textverarbeitungsprogramm jemals Milliarden von Zeichen benötigen würde oder dass eine Webseite jemals Milliarden von HTML-Elementen benötigen würde.Es gibt einfach grundlegende Unterschiede im Verhältnis der numerischen Größen zu den Realitäten der physischen Welt, des menschlichen Geistes usw.

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