Kullandığım işletim sisteminin nasıl kullanıldığını görmek için ram'ı tamamen doldurmak için bağlantılı listeler kullanarak bir C programı yazdım. Program ve kaynak yöneticisininÖnceden boş alan büyük olduğunda yalnızca ~ 1400MB ayırdıktan sonra alan tükeniyor.
ekran görüntüsü: http://i.imgur.com/s6OQRBG.png
Ben virtualbox içinde Kali linux koşuyordu ve os sadece 3 konser yakın ancak bellek dolu ... edilmiş 700 imsi MB böylece boş alan kullanıyordum Programımda sadece 1420MB ayırdıktan sonra. Aşağıdaki kodu:
#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 düğümler bir kilobayt (16 * 64 = 1024) ve olmalıdır 1024 KB bir MB olmalı ... öyleyse neden benim ram ayırmaları sadece ~ 1400MB değerinde sonra dolduruluyor?
nerede 'j var ++'? – user3528438
Ve malloc biraz daha fazla ayırma esnekliğini saklı tutar, bu nedenle küçük parçaları çok fazla tahsis ettiğinizde hafızanın tamamen kullanılmasını beklemeyin. i – user3528438
user3528438 sabit @, virtualbox arta kodu kopyalayıp teslim etmesi gerektiğini; // 16 bayt boyutuna göre, sizeof() 'malloc() yükü muhtemelen aynı aralıktadır ve bellek tüketiminizi etkin bir şekilde iki katına çıkarır. - >> çok sayıda küçük ayırmalardan kaçının. – ohmyginger