मैं सी के साथ प्रयोग करना जारी रखता हूं। मेरे पास यह प्रोग्राम है जो आपको यह तय करने की अनुमति देता है कि आप कितनी रैम खाना चाहते हैं।सी के साथ प्रयोग - मैं 2 जीबी मेमोरी आवंटित और उपयोग क्यों नहीं कर सकता?
char * eatRAM()
{
unsigned long long toEat;
unsigned long long i = 0;
float input;
char * pMemory = NULL;
int megaByte = 1048576;
puts("How much RAM do you want to eat? (in Mega Bytes)");
puts("NOTE: If you want to eat more RAM than you have available\nin your system, the program will crash");
printf("\n>> MB: ");
scanf("%f", &input);
toEat = (unsigned long long)(input * megaByte);
pMemory = malloc(toEat);
printf("\n\nEating in total: %llu Bytes\n", toEat);
puts("Check your task manager!\n");
if(pMemory != NULL)
{
printf("\n\nEating in total: %llu Bytes\n", toEat);
puts("Check your task manager!\n");
for(i; i < toEat; i++)
{
pMemory[i] = 'x';
}
}
else
{
puts("\nSeems like that amount of memory couldn't be allocated :(\n");
}
return pMemory;
}
UPDATED प्रश्न:
बात यह है कि ... अगर मैं उदाहरण 1024MB यह काम करता है के लिए दर्ज करते हैं, मैं कार्य प्रबंधक में देख सकते हैं यह राम के 1GB उपयोग कर रहा है। यहां तक कि अगर मैं 1500MB यह काम करता है ..
दर्ज लेकिन अगर मैं 2048MB दर्ज यह कहता है
स्मृति के उस राशि आवंटित नहीं किया जा सका :(
या की तरह लगता है भले ही मैं 1756MB
याद रखें कि मैं सी के लिए नया हूं, शायद मैं कुछ महत्वपूर्ण रिलाट छोड़ रहा हूं ओएस कैसे मुझे स्मृति तक पहुंचने की अनुमति देता है, यह क्या हो सकता है?
malloc शायद विफल हो जाता है और शून्य लौटाता है, तो –
क्रैश की जांच करें क्योंकि आप स्मृति तक पहुंचने का प्रयास करते हैं हालांकि आवंटन विफल हुआ, आपको इसका उपयोग करने से पहले 'pmemory! = NULL' को जांचना होगा। साथ ही, आपको 'malloc() 'नहीं डालना चाहिए, सामान्य रूप से कभी भी' शून्य * 'से किसी अन्य सूचक को नहीं डाला जाना चाहिए। –
आपके कंप्यूटर में कितनी रैम है? –