2016-06-25 19 views
1

Ich entwickle gerade ein Spiel unter FreeBSD. Ich kompiliere es mit clang als 32-Bit-Binärdatei und läuft es unter einem 64-Bit-System (ich habe 32 GB RAM unter diesem System), aber ich brauche von ihm mehr als 4 GB RAM zu verwenden, da es nur 4 GB verwendet.
Auch wenn ich mehrere Instanzen des Spiels ausführen, kann es nicht auf mehr als 4 GB RAM zugreifen.Erlaube 32-Bit-Anwendung mehr als 4 GB RAM unter FreeBSD zu verwenden

Ich habe auch versucht, es unter 64-Bit-System zu kompilieren, aber es hat ein seltsames Verhalten. Ich bekomme viele Bugs.

Ich weiß, dass Visual Studio unter Windows gibt es eine Option /LARGEADDRESSAWARE, oder so etwas, die 32-Bit-Anwendung in der Lage, mehr RAM zu verwenden, oder ich bin falsch?
Gibt es irgendwelche Flags, die ich angeben kann (wie die Windows), damit meine Binärdatei mehr RAM verwenden kann? Ich habe etwas über mcmodel=large (oder medium) gelesen, aber ich bin mir nicht sicher, dass das ist, was ich suche.
Wie wäre es mit Cross-Compiling? Weiß jemand, wo ich ein paar gute Informationen darüber finden kann?
Vielen Dank.

+2

2^32/4GB == 1 –

+6

"Ich habe auch versucht, es unter 64-Bit-System zu kompilieren, aber es hat ein seltsames Verhalten. Ich bekomme eine Menge Fehler." - Sie werden diese Fehler dann beheben wollen. Wenn Sie konkrete Probleme haben, die Sie selbst nicht lösen können, könnte das eine gute Frage sein. Das gilt auch für Windows: '/ LARGEADDRESSAWARE' lässt Ihre Anwendung auch nicht mehr als 4GB adressieren. – hvd

+0

Suchen Sie in Speicherabbilddateien. – nwp

Antwort

4

Sie können 4GiB nur mit einer 32-Bit-Ganzzahl adressieren. 2^32 = 4294967296 = 4 * 1024 * 1024 * 1024

Es gibt keine Möglichkeit mehr als 4GiB Adressraum in einer ausführbaren 32-Bit-Datei zu haben. Das ist eine mathematische Einschränkung. Zugegebenermaßen können Sie Swapping und Physical Address Extensions verwenden, um mit mehr als 4GiB an Daten in einem Prozess umzugehen, aber zu einem bestimmten Zeitpunkt können Sie nicht mehr als 4GiB adressieren.

+2

PAE ist nur für den Kernel-Modus relevant. Der äquivalente Benutzermodus wäre etwas wie "mmap". Wie auch immer, die einzige Möglichkeit, mehr als 2^32 Bytes zu adressieren, besteht darin, Teile Ihres Adressraums auszutauschen ("bank"). –

+0

@Rhymoid: In der Tat ist PAE nur relevant für den Kernel-Modus, aber ich wollte die Antwort so allgemein wie möglich halten. 32 Bit bedeutet 4 GiB Adressraum und das war's. – datenwolf

0

Um mehr als 4 GB RAM zu verwenden, benötigen Sie eine 64-Bit-Version von FreeBSD. Dies bedeutet grundsätzlich "amd64" anstelle von "i386" -Architektur. Sie können 32-Bit-Binärdateien unter 64-Bit-System ausführen, und dies ermöglicht es den mehreren Instanzen, mehr als 4 GB RAM zu verwenden. offensichtlich kann ein einzelner nicht mehr als das ansprechen.

+0

Wie ich angegeben habe, ich es unter einem dedizierten Server mit 32 GB RAM und FreeBSD x64 laufen, mit 30 Instanzen davon, aber ich habe immer über 26 GB freien RAM. Außerdem habe ich einen MySQL-Server, der RAM verwendet. Es sollte mehr RAM verwenden, denke ich. – Shockwave

+0

Es sollte. Kannst du die tatsächlichen Statistiken einfügen? –