您的位置:首页 > 其它

malloc可分配的最大空间

2014-05-14 17:39 330 查看
#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 = 1

maximum = 3817154560

i = 2

maximum = 3817275346

maximum = 3817275346

maximum = 3.555115G

OK

注:i为1和2时,每次结果一般不同,这和当前系统运行有关。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐