#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
void* malloc111(size_t nbytes);//映射
int main(){
unsigned maximum = 0;
unsigned int size[] = {1024*1024, 1024, 1};
int i,count;
for(i=0;i<3;i++){
for(count=1;;++count){
void *block=malloc(maximum + size[i]*count);
if(block){
maximum += size[i]*count;
free(block);
}
else{
printf("i = %d\n", i);
printf("maximum = %u\n", maximum);
break;
}
}
}
printf("maximum = %u\n", maximum);
printf("maximum = %lfG\n", maximum/1024.0/1024.0/1024.0);
void *tmp = malloc111(100);
if(tmp == 0){
printf("NO \n");
goto bk;
}
printf("OK \n");
bk:
return 0;
}
void* malloc111(size_t nbytes){
void *tmp = mmap(0, nbytes, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
if(MAP_FAILED == tmp){
return 0;
}
return tmp;
}
result:
i = 0
maximum = 3743416320
i = 1maximum = 3817154560
i = 2
maximum = 3817275346
maximum = 3817275346
maximum = 3.555115G
OK
注:i为1和2时,每次结果一般不同,这和当前系统运行有关。