9. Memory (Andries ब्रौवेर द्वारा The Linux kernel, Some remarks on the Linux Kernel का हिस्सा) एक अच्छा दस्तावेज़ है।
इसमें निम्न प्रोग्राम शामिल हैं जो वास्तविक स्मृति बनाम लिनक्स के भौतिक स्मृति के संचालन को प्रदर्शित करते हैं और कर्नेल के आंतरिक बताते हैं।
आम तौर पर, पहले डेमो प्रोग्राम को malloc() वापस शून्य से पहले स्मृति की एक बड़ी मात्रा मिल जाएगी। दूसरे डेमो प्रोग्राम को स्मृति की बहुत छोटी मात्रा मिल जाएगी, अब पहले प्राप्त स्मृति का उपयोग वास्तव में किया जाता है। तीसरा कार्यक्रम पहले कार्यक्रम के रूप में एक ही बड़ी राशि प्राप्त करेगा, और फिर जब यह अपनी स्मृति का उपयोग करना चाहता है तो यह मारा जाता है।
डेमो प्रोग्राम 1: इसका उपयोग किए बिना स्मृति आवंटित करें।
#include <stdio.h>
#include <stdlib.h>
int main (void) {
int n = 0;
while (1) {
if (malloc(1<<20) == NULL) {
printf("malloc failure after %d MiB\n", n);
return 0;
}
printf ("got %d MiB\n", ++n);
}
}
डेमो कार्यक्रम 2: स्मृति को आबंटित है और वास्तव में यह सब स्पर्श करें।
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main (void) {
int n = 0;
char *p;
while (1) {
if ((p = malloc(1<<20)) == NULL) {
printf("malloc failure after %d MiB\n", n);
return 0;
}
memset (p, 0, (1<<20));
printf ("got %d MiB\n", ++n);
}
}
डेमो प्रोग्राम 3: पहले आवंटित करें और बाद में उपयोग करें।
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 10000
int main (void) {
int i, n = 0;
char *pp[N];
for (n = 0; n < N; n++) {
pp[n] = malloc(1<<20);
if (pp[n] == NULL)
break;
}
printf("malloc failure after %d MiB\n", n);
for (i = 0; i < n; i++) {
memset (pp[i], 0, (1<<20));
printf("%d\n", i+1);
}
return 0;
}
(एक अच्छी तरह से कार्य प्रणाली पर, Solaris की तरह, तीन डेमो कार्यक्रमों स्मृति का एक ही राशि प्राप्त करने और दुर्घटना नहीं है, लेकिन malloc() वापसी शून्य देखें।)
दिलचस्प सवाल; मैं अन्य प्लेटफॉर्म पर भी व्यवहार के बारे में उत्सुक हूं, लेकिन इस सवाल को लिनक्स पर लॉक करने के लिए कुडोस। –