/ / 32-Bit-Anwendungen erlauben, mehr als 4 GB RAM unter FreeBSD zu verwenden - c ++, clang, freebsd, clang ++

Erlaube 32-Bit-Anwendung mehr als 4 GB RAM unter FreeBSD - C ++, Clang, Freebsd, Clang ++

Ich entwickle gerade ein Spiel unter FreeBSD. Ich kompiliere es mit clang Als 32-Bit-Binärdatei läuft es unter einem 64-Bit-System (ich habe 32 GB RAM unter diesem System), aber ich brauche davon mehr als 4 GB RAM, da es nur 4 GB verwendet.
Selbst wenn ich mehrere Instanzen des Spiels starte, kann es nicht auf mehr als 4 GB RAM zugreifen.

Außerdem habe ich versucht, es unter 64-Bit-System zu kompilieren, aber es hat ein seltsames Verhalten. Ich bekomme viele Fehler.

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

Antworten:

4 für die Antwort № 1

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 4 GB Adresse zu habenSpeicherplatz in einer 32-Bit-Programmdatei. Dies ist eine mathematische Einschränkung. Sie können zwar Swapping und Physical Address Extensions verwenden, um mehr als 4 GB Daten in einem Prozess zu verarbeiten, Sie können jedoch zu einem bestimmten Zeitpunkt nicht mehr als 4 GB Daten adressieren.


0 für die Antwort № 2

Um mehr als 4 GB RAM zu verwenden, benötigen Sie 64 BitVersion von FreeBSD. Dies bedeutet im Grunde "amd64" anstelle von "i386" Architektur. Sie können 32-Bit-Binärdateien unter 64-Bit-Systemen ausführen. Auf diese Weise können mehrere Instanzen mehr als 4 GB RAM verwenden. offensichtlich kann ein einzelner nicht mehr als das ansprechen.