Ordnet mmap oder malloc RAM zu?

Ich weiß, dass dies wahrscheinlich eine dumme Frage ist, aber ich habe eine Weile gesucht und kann keine endgültige Antwort finden. Wenn ich benutzemmap odermalloc (in C, auf einem Linux-Rechner) reserviert man entweder Speicherplatz im RAM? Wenn ich zum Beispiel 2 GB RAM habe und den gesamten verfügbaren RAM nutzen möchte, kann ich einfach einen verwendenmalloc/memset Combo,mmap, oder gibt es eine andere Option, die ich nicht kenne?

Ich möchte eine Reihe einfacher Programme schreiben, die gleichzeitig ausgeführt werden können und den gesamten verwendeten RAM-Speicher behalten, um die Verwendung von Swap zu erzwingen, und Seiten häufig ein- und auszutauschen. Ich habe dies bereits mit dem folgenden Programm versucht, aber es ist nicht genau das, was ich will. Es reserviert Speicher (RAM?) Und erzwingt die Verwendung von Swap (wenn genügend Instanzen ausgeführt werden), aber wenn ich anrufesleep Verhindert das nicht einfach, dass der Speicher verwendet wird (also wird eigentlich nichts in andere Prozesse ein- oder ausgelagert?), oder verstehe ich etwas falsch?

Wenn ich dies zum Beispiel dreimal ausgeführt hätte, würde ich 2 GB (alle) RAM der ersten beiden Instanzen verwenden und die dritte Instanz würde dann eine der beiden vorherigen Instanzen (von RAM) und die aktuelle Instanz in RAM auslagern? Oder würde Instanz 3 nur mit Festplatte oder virtuellem Speicher ausgeführt?

Dies bringt einen weiteren Punkt auf den Punkt. Muss ich genügend Speicher zuweisen, um auch den gesamten verfügbaren virtuellen Speicher für die zu verwendende Swap-Partition zu nutzen?

Zuletzt würdemmap (oder irgendeine andere C-Funktion. Verdammt noch mal, sogar eine andere Sprache, falls zutreffend) Besser dafür?

#include <stdio.h>
#include <stdlib.h>
#include <string.h> 

#define MB(size) ( (size) * 1024 * 1024)
#define GB(size) ( (size) * 1024 * 1024 * 1024)


int main(){
    char *p;
    p = (char *)malloc(MB(512));
    memset(p, 'T', MB(512));
    printf(".5 GB allocated...\n");

    char *q;
    q = (char *)malloc(MB(512));
    memset(q, 'T', MB(512));
    printf("1 GB allocated...\n");
    printf("Sleeping...\n");

    sleep(300);
}

** Bearbeiten: Ich verwende CentOS 6.4 (mit 3.6.0 Kernel) für mein Betriebssystem, falls dies hilfreich ist.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage