Wie viel virtuellen Speicher wird reserviert?

...komplette Frage anzeigen

1 Antwort

Du kannst Dir ein Testprogramm schreiben und es ausgeben:

Ein Char ist ein Byte (gibts auch in limits.h nachzulesen), damit verwundert das Ergebnis kaum:

int main()

{

char var1;
char *var2;
char var3[10];

printf("Size of var: %ld bytes\n",sizeof(var1));
printf("Size of *var: %ld bytes\n",sizeof(var2));
printf("Size of var[]: %ld bytes\n",sizeof(var3));

return 0;
}
lecux@gw1:~$ gcc -o try try.c

lecux@gw1:~$ ./try
Size of var: 1 bytes
Size of *var: 8 bytes
Size of var[]: 10 bytes
lecux@gw1:~$
JamesOffice 25.06.2016, 00:15

Ich war verwirrt wegen Virtuellen Speicher! Also das heißt, das was ich aufm Terminal sehen ist mit Sicherheit der virtuelle Speicher, da ich nie Zugriff auf dem Physikalischen Speicher habe (MMU Sache)?

0
LeCux 25.06.2016, 00:32
@JamesOffice

Das Programm oben allokiert Speicher. Ob das realer RAM ist oder ein SWAP das erfährst du dabei nicht. Was "top" aber als VIRT ausgibt ist folgendes:

Die virtuelle Größe des Prozesses, das ist die Summe aus dem realem Speicherverbrauch, gemappten Speicher (Interprozess-Kommunikation, Shared, Grafikkarten), Dateien (mem-mapped Files, Libraries). Damit ist das die Menge an Speicher auf die ein Prozess zugreifen kann - was bei weitem nicht alleine das ist, was Variablen verbrauchen.

Das kleine Progrämmchen kommt auch schon auf 9MB:

 valgrind --tool=massif --pages-as-heap=yes --massif-out-file=massif

==12360== Massif, a heap profiler
==12360== Copyright (C) 2003-2011, and GNU GPL'd, by Nicholas Nethercote
==12360== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==12360== Command: ./try
==12360==
Size of var: 1 bytes
Size of *var: 8 bytes
Size of var[]: 10 bytes
==12360==
6094848
0

Was möchtest Du wissen?