Frage

Welche Überlegungen muss ich anstellen, wenn ich möchte, dass mein Code sowohl auf 32-Bit- als auch auf 64-Bit-Plattformen ordnungsgemäß ausgeführt wird?

BEARBEITEN:Auf welche Bereiche muss ich achten, z.B.Zeichenfolgen/Zeichen drucken oder Strukturen verwenden?

War es hilfreich?

Lösung

Optionen:

Codieren Sie es in einer Sprache mit a Virtuelle Maschine (wie Java)

Codieren Sie es in .NET und zielen Sie nicht auf eine bestimmte Architektur ab.Der .NET JIT-Compiler kompiliert es für Sie in die richtige Architektur, bevor es ausgeführt wird.

Andere Tipps

Eine Lösung wäre, eine virtuelle Umgebung anzustreben, die auf beiden Plattformen läuft (ich denke hier an Java oder .Net).

Oder wählen Sie eine gedolmetschte Sprache.

Haben Sie weitere Anforderungen, beispielsweise den Aufruf vorhandener Codes oder Bibliotheken?

Die gleichen Dinge, die Sie schon immer hätten tun sollen, um sicherzustellen, dass Sie portablen Code schreiben :)

Mozilla-Richtlinien und das C FAQ sind gute Ausgangspunkte

Ich gehe davon aus, dass Sie immer noch davon reden kompilieren sie separat für jede einzelne Plattform?Da sie auf beiden ausgeführt werden können, genügt die Erstellung einer 32-Bit-Binärdatei.

Das größte Problem besteht darin, sicherzustellen, dass Sie keine Zeiger auf 32-Bit-Speicherorte setzen.

Aber es gibt eigentlich keine richtige „sprachunabhängige“ Antwort auf diese Frage.Sie könnten nicht einmal eine besonders eindeutige Antwort erhalten, wenn Sie sich auf etwas wie Standard „C“ oder „C++“ beschränken würden – die Größe des Datenspeichers, der Zeiger usw. hängt stark von der Implementierung ab.

Ehrlich gesagt hängt es von der Sprache ab, denn verwaltete Sprachen wie C# und Java oder Skriptsprachen wie JavaScript, Python oder PHP sind an ihre aktuelle Methodik gebunden, und um anzufangen und alles zu tun, was über die fortgeschrittenen Dinge hinausgeht, gibt es nicht viel zu befürchten .

Aber ich vermute, dass Sie nach Sprachen wie C++, C und anderen Sprachen auf niedrigerem Niveau fragen.

Das Größte, worüber Sie sich Sorgen machen müssen, ist die Größe der Dinge, denn in der 32-Bit-Welt sind Sie auf die Potenz von 2^32 beschränkt, in der 64-Bit-Welt werden die Dinge jedoch größer, nämlich 2^64.

Mit 64-Bit steht Ihnen mehr Speicherplatz im RAM zur Verfügung und Sie können größere Zahlen berechnen.Wenn Sie jedoch wissen, dass Sie sowohl für 32 als auch für 64 kompilieren, müssen Sie sicherstellen, dass Sie Ihre Erwartungen an das System auf die 32-Bit-Welt und die Einschränkungen von Puffern und Zahlen beschränken.

Denken Sie in C (und möglicherweise C++) immer daran, den Operator sizeof zu verwenden, wenn Sie die Puffergrößen für malloc berechnen.Auf diese Weise schreiben Sie ohnehin mehr portablen Code und berücksichtigen automatisch 64-Bit-Datentypen.

In den meisten Fällen müssen Sie lediglich Ihren Code für beide Plattformen kompilieren.(Und das setzt voraus, dass Sie eine kompilierte Sprache verwenden;Wenn nicht, brauchen Sie sich wahrscheinlich um nichts zu kümmern.)

Das Einzige, was meiner Meinung nach zu Problemen führen könnte, ist die Annahme der Größe von Datentypen, was Sie wahrscheinlich sowieso nicht tun sollten.Und natürlich wird alles, was in Assembler geschrieben wird, Probleme verursachen.

Beachten Sie, dass viele Compiler die Größe einer Ganzzahl basierend auf der zugrunde liegenden Architektur auswählen, da „int“ (einigen Theorien zufolge) der schnellste Zahlenmanipulator im System sein sollte.

Aus diesem Grund verwenden so viele Programmierer Typedefs für ihre portabelsten Programme. Wenn Sie möchten, dass Ihr Code auf allen Prozessoren funktioniert, von 8-Bit-Prozessoren bis hin zu 64-Bit-Prozessoren, müssen Sie sich darüber im Klaren sein, dass int in C ohnehin nicht starr definiert ist.

Zeiger sind ein weiterer Bereich, in dem Sie vorsichtig sein sollten – verwenden Sie kein Long oder Long Long oder einen bestimmten Typ, wenn Sie mit dem numerischen Wert des Zeigers herumspielen – verwenden Sie das richtige Konstrukt, das leider von Compiler zu Compiler unterschiedlich ist ( Aus diesem Grund haben Sie für jeden von Ihnen verwendeten Compiler eine separate Datei „typedef.h“.

-Adam Davis

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