मैंने लिनक्स और विंडोज ओएस के मेमोरी मैनेजमेंट तनाव परीक्षण की जांच करने के लिए एक कोड लिखा था। बस आगे के परीक्षणों के लिए मैंने आगे बढ़कर जांच की कि मैलोक() द्वारा लौटाई गई मेमोरी में कौन से मूल्य मौजूद हैं।क्या मॉलोक (और उसके चचेरे भाई) द्वारा लौटाई गई स्मृति खंड शून्य से शुरू हुई है?
वापस आने वाले मान सभी 0 (शून्य) हैं। मैंने विंडोज और लिनक्स दोनों पर मैलोक के मैन पेज को पढ़ा है, लेकिन मैं इस व्यवहार के कारण को खोजने में सक्षम नहीं हूं। मैनपेज के अनुसार
malloc() फ़ंक्शन आकार बाइट आवंटित करता है और आवंटित स्मृति में एक सूचक देता है। स्मृति शुरू नहीं हुई है।
मेमोरी सेगमेंट को साफ़ करने के लिए, किसी को मैन्युअल रूप से memset() का उपयोग करना होगा।
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <stdbool.h>
int eat(long total,int chunk){
long i;
for(i=0;i<total;i+=chunk){
short *buffer=malloc(sizeof(char)*chunk);
if(buffer==NULL){
return -1;
}
printf("\nDATA=%d",*buffer);
memset(buffer,0,chunk);
}
return 0;
}
int main(int argc, char *argv[]){
int i,chunk=1024;
long size=10000;
printf("Got %ld bytes in chunks of %d...\n",size,chunk);
if(eat(size,chunk)==0){
printf("Done, press any key to free the memory\n");
getchar();
}else{
printf("ERROR: Could not allocate the memory");
}
}
शायद मुझे कुछ याद आ रहा है। कोड से here
संपादित अनुकूलित है: समस्या जीसीसी विशिष्ट उत्पादन के लिए here उत्तर दिया गया गया है। मेरा मानना है कि विंडोज ऑपरेटिंग सिस्टम भी एक ही प्रक्रिया का पालन करेगा।
पर भरोसा करते हैं तो अन्य सिस्टम पर असफल हो सकता है। क्या आप बिंदु के लिए कुछ संदर्भ साझा कर सकते हैं "इन पृष्ठों को ओएस द्वारा शून्य किया गया है।" धन्यवाद – coder
@ मिस्टिकिक एक अच्छा जवाब देता है: http://stackoverflow.com/a/8029624/944201 – xmoex
मुझे कभी भी 'तार्किक-या-बराबर' को पहले कभी नहीं देखा गया है ... –