Ich schrieb ein C-Programm mithilfe von verketteten Listen, um RAM komplett aufzufüllen, um zu sehen, wie das Betriebssystem, das ich verwendete, damit umgehen würde.Nach Platzieren von nur ~ 1400MB, wenn freier Speicherplatz vorher war viel weniger Platz
Screenshot des Programms und der Ressourcen-Manager: http://i.imgur.com/s6OQRBG.png
Ich lief kali Linux in VirtualBox und das os nur wurde mit 700-ish MB so freien Raum wurde in der Nähe 3 Gigs ... aber der Speicher gefüllt nach dem Zuweisen von 1420MB in meinem Programm. Code unten:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
typedef struct node
{
char val;
struct node *next;
} node_t; // 16 bytes according to sizeof()
node_t *create_node(node_t *current, char newval)
{
node_t *head = malloc(sizeof(node_t));
head->val = newval;
head->next = current;
return head;
}
int main(void)
{
node_t *head = NULL;
for (int i = 0; i < 1099511627776; i++) //arbitrarily large number
{
for (int j = 0; j < 65536; j++) //64*1024
{
head = create_node(head, 'a');
}
usleep(11111);
printf("%dMB\n", i+1);
}
return 0;
}
64 Knoten sollte ein Kilobyte (16 * 64 = 1024) und 1024 KB soll ein MB sein ... seine so, warum ist mein ram bereits nach den Zuweisungen ~ 1400MB Wert gefüllt werden?
wo ist das 'j ++'? – user3528438
Und malloc reserviert die Flexibilität, um etwas mehr zu reservieren, also erwarte nicht, dass der Speicher voll genutzt wird, wenn du kleine Teile zu oft zuteilen musst. – user3528438
@ user3528438 behoben, musste den Code aus virtualbox bc kopieren ich konnte nicht freigegeben Zwischenablage oder Drag n Drop zur Arbeit – ohmyginger