Frage

Ich habe mich schon lange gefragt, seit ich noch nie eine "formelle" Ausbildung in Bezug auf Informatik hatte (ich bin in der Highschool). Bitte entschuldigen Sie meine Unwissenheit zu diesem Thema.

Auf einer Plattform, die die drei im Titel aufgeführten Zahlen unterstützt, welches ist besser und warum? (Ich weiß, dass jede Art von INT eine andere Länge im Gedächtnis hat, aber ich bin mir nicht sicher, was das bedeutet oder wie sie sich auf die Leistung auswirkt, oder aus Sicht eines Entwicklers, den man mehr Vorteile gegenüber dem anderen hat).

Vielen Dank im Voraus für Ihre Hilfe.

War es hilfreich?

Lösung

"Better" ist ein subjektiver Begriff, aber einige ganze Zahlen sind auf bestimmten Plattformen leistungsfähiger.

Zum Beispiel ist die CPU in einem 32-Bit oder in einem einzigen Zyklus produzieren. (Dies ist eine wirklich vereinfachte Erklärung, aber sie bringt die allgemeine Idee.)

In einem 64-Bit-Computer (die jüngsten AMD- und Intel-Prozessoren fallen in diese Kategorie) ist die CPU so optimiert, dass sie 64-Bit-Werte gleichzeitig verarbeiten.

Auf einer 32-Bit-Plattform müsste eine 16-Bit-Ganzzahl, die in eine 32-Bit-Adresse geladen wurde, 16 Bits auf Null gesetzt werden, damit die CPU darauf arbeiten kann. Eine 32-Bit-Ganzzahl wäre ohne Änderung sofort verwendbar, und eine 64-Bit-Ganzzahl müsste in zwei oder mehr CPU-Zyklen betrieben werden (einmal für die niedrigen 32-Bit und dann wieder für die hohen 32-Bit) .

Umgekehrt müssten auf einer 64-Bit-Plattform 16-Bit-Ganzzahlen 48 Bit mit Null gestellt, 32-Bit-Ganzzahlen müssten 32 Bit mit Null haben und 64-Bit-Ganzzahlen können sofort betrieben werden.

Jede Plattform und CPU haben eine "native" Bitness (wie 32 oder 64), und dies begrenzt normalerweise einige der anderen Ressourcen, auf die diese CPU zugegriffen werden kann (z. B. die 3 GB/4 GB-Speicherbegrenzung von 32-Bit-Prozessoren ). Die 80386-Prozessor-Familienverfahren (und später X86) haben 32-Bit zur Norm gemacht, aber jetzt machen Unternehmen wie AMD und dann Intel derzeit 64-Bit zur Norm.

Andere Tipps

Um Ihre erste Frage zu beantworten, hängt die Verwendung von 16 Bit gegenüber einem 32 -Bit -gegen -64 -Bit -Ganze vom von ihm verwendeten Kontext ab. Daher kann man wirklich nicht sagen, dass einer übereinander besser ist, per sagen. Abhängig von einer Situation ist die Verwendung eines anderen über einen anderen vorzuziehen. Betrachten Sie dieses Beispiel. Nehmen wir an, Sie haben eine Datenbank mit 10 Millionen Nutzern und möchten in dem Jahr, in dem sie geboren wurden, speichern. Wenn Sie ein Feld in Ihrer Datenbank mit einer 64 -Bit -Ganzzahl erstellen, haben Sie 80 Megabyte Ihres Speichers erschöpft. Wenn Sie ein 16 -Bit -Feld verwenden, werden nur 20 Megabyte Ihres Speichers verwendet. Sie können hier ein 16 -Bit -Feld verwenden, da die geborenen Jahreszeiten kleiner als die größte 16 -Bit -Zahl sind. Mit anderen Worten, 1980, 1990, 1991 <65535, vorausgesetzt, Ihr Feld ist nicht signiert. Alles in allem hängt es vom Kontext ab. Ich hoffe das hilft.

Eine einfache Antwort ist, die kleinste zu verwenden, die Sie kennen, ist sicher für den Bereich der möglichen Werte, die sie enthalten.

Wenn Sie wissen, dass die möglichen Werte auf eine 16-Bit-Ganzzahl von maximaler Länge eingeschränkt sind (z. B. der Wert, der dem Tag des Jahres entspricht-immer <= 366), dann verwenden Sie das. Wenn Sie sich nicht sicher sind (z. B. die Datensatz -ID einer Tabelle in einer Datenbank, die eine beliebige Anzahl von Zeilen haben kann), verwenden Sie je nach Beurteilung INT32 oder INT64.

Andere können Ihnen wahrscheinlich ein besseres Gefühl für die Leistungsvorteile geben, je nachdem, welche Programmiersprache Sie verwenden, aber die kleineren Typen verwenden weniger Speicher und sind daher „besser“ zu verwenden, wenn Sie nicht größer sind.

Nur als Referenz bedeutet eine 16 -Bit -Ganzzahl 2^16 mögliche Werte - im Allgemeinen zwischen 0 und 65.535 dargestellt. 32-Bit-Werte betragen bis zu 2^32 oder etwas mehr als 4,29 Milliarden Werte.

Diese Frage Ist bei 32-Bit-CPUs ein "Ganzzahl" effizienter als ein "kurzer" Typ? Kann einige weitere gute Informationen hinzufügen.

Es hängt davon ab, ob Geschwindigkeit oder Speicher optimiert werden sollten. Wenn Sie an Geschwindigkeit interessiert sind und SQL Server im 64 -Bit -Modus ausführen, sind 64 -Bit -Tasten Sie benötigen. Ein 64 -Bit -Prozessor, der im 64 -Bit -Modus ausgeführt wird, wird für die Verwendung von 64 Bitnummern und Adressen optimiert. Ebenso ist ein 64 -Bit -Prozessor, der im 32 -Bit -Modus ausgeführt wird, für die Verwendung von 32 Bitnummern und Adressen optimiert. Beispielsweise sind im 64 -Bit -Modus alle Drücken und Pops auf den Stapel 8 Bytes usw. Auch von Cache und Speicher werden erneut für 64 -Bit -Nummern und -adressen optimiert. Der Prozessor, der im 64 -Bit -Modus ausgeführt wird, benötigt möglicherweise mehr Maschinenzyklen, um eine 32 -Bit -Nummer wie ein Prozessor zu verarbeiten. Der im 32 -Bit -Modus ausgeführte Modus benötigt mehr Maschinenzyklen, um eine 16 -Bit -Nummer zu verarbeiten. Die Erhöhung der Verarbeitungszeit erfolgt aus vielen Gründen, aber denken Sie nur über das Beispiel der Speicherausrichtung nach: Die 32 -Bit -Zahl wird möglicherweise nicht an einer 64 -Bit -Integralgrenze ausgerichtet, was bedeutet, dass das Laden der Zahl das Verlagerungen und Maskieren der Zahl nach dem Laden in a erfordert registrieren. Zumindest muss jede 32 -Bit -Zahl vor jeder Operation maskiert werden. Wir sprechen zumindest die effektive Geschwindigkeit des Prozessors, während wir 32 oder 16 -Bit -Ganzzahlen im 64 -Bit -Modus bearbeiten.

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