Сколько ГБ может выделить malloc для вашей программы - PullRequest
5 голосов
/ 02 февраля 2011

Я использовал следующий код, чтобы выяснить это, но я всегда получаю 1 в качестве ответа. что-то не так. Спасибо

#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-битная система с установленными Windows и Linux. Таким образом, верна ли приведенная выше логика, даже если я получаю ответ только 1 ГБ в 64-битной системе?

Ответы [ 3 ]

3 голосов
/ 02 февраля 2011

Если это 32-битная ОС, то неудивительно, что самый большой непрерывный блок будет 1 ГБ (или где-то между этим и 2 ГБ).В 64-битной ОС возможны большие блоки.

Если вы измените свой код для выделения меньших отдельных фрагментов, вы, вероятно, сможете выделить более 1 ГБ.

1 голос
/ 08 февраля 2011
int main(void){
    int MB = 0;
    while(malloc(1<<30)){
        ++MB;
    }
    printf("The number of gigs allocated is : %d\n",MB);
    return EXIT_SUCCESS;
}
1 голос
...