मैंने इसे खोजने के लिए निम्न कोड का उपयोग किया लेकिन मुझे हमेशा जवाब के रूप में 1 मिलता है। क्या वहाँ कुछ गड़बड़ है। धन्यवादआपके प्रोग्राम के लिए आवंटित कितने जीबी malloc
#include <stdio.h>
#include <stdlib.h>
int main(){
int mult = 0;
int chk =8;
do{
mult+=1;
int *p = (int*)malloc(1024*1024*1024*mult);
if(p==0){
chk =0;
}else{
free(p);
}
}while(chk !=0);
mult = mult -1;
printf("The number of gigs allocated is : %d\n",mult);
return 0;
}
बस मदद करने के लिए, मेरे पास 64 बिट सिस्टम दोनों विंडोज़ और लिनक्स स्थापित हैं। इस प्रकार, उपरोक्त तर्क सही है भले ही मुझे 64 बिट सिस्टम पर उत्तर के रूप में केवल 1 जीबी मिल रहा है?
यह अपने ओ/s पर निर्भर करता है। यह ओ/एस द्वारा निर्धारित सीमाओं पर निर्भर हो सकता है, जिसे उचित विशेषाधिकार प्राप्त उपयोगकर्ताओं द्वारा समायोजित किया जा सकता है। क्या आपने 1023 * 1024 * 1024 * 2 आवंटित करने का प्रयास किया है? –
मुझे लगता है कि यह कोड पूर्णांक ओवरफ्लो से पीड़ित है, यदि int एक हस्ताक्षरित 32-बिट चर है। स्थिरांक को लंबे समय तक हस्ताक्षर करने का प्रयास करें (या आपके कंपाइलर के पास लंबे समय तक हस्ताक्षर किए गए हैं)। – unwind
@unwind यह मेरे लिए काम किया। मैं इसे बंद करने से पहले पिछले 500 जीबी प्राप्त करने में सक्षम था। (मैक ओएस एक्स एक निश्चित आकार से 'mmap()' का उपयोग करता है।) अपनी टिप्पणी को एक उत्तर दें ताकि मैं इसे वोट दे सकूं। – chrisaycock