马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目:malloc函数最大可以申请多少内存空间
小甲鱼的代码#include <stdio.h>
#include <stdlib.h>
int main(void)
{
void *block;
int i, count;
size_t maximum = 0;
size_t blocksize[] = {1024 * 1024, 1024, 1};
// 下面从大到小依次尝试
// 先尝试以1024 * 1024为扩大粒度去申请内存空间
// 当malloc返回NULL时,将扩大的粒度缩小为1024继续尝试
// 最终精确到1个字节的粒度扩大maximum的尺寸
for (i = 0; i < 3; i++)
{
for (count = 1; ;count++)
{
block = malloc(maximum + blocksize[i] * count);
if (block)
{
maximum += blocksize[i] * count; //问题所在
free(block);
}
else
{
break;
}
}
}
printf("malloc在当前环境下申请到的最大空间是:%.2fGB\n", maximum * 1.0 / 1024 / 1024 / 1024);
return 0;
}
不是很明白为什么要maximum += blocksize[i] * count;
试个数
block = malloc(0 + 1024 * 1024 * 1)
maximum = 0 + 1024 * 1024 * 1
block = malloc(1024 * 1024 * 1 + 1024 * 1024 * 2)这里直接就从1024 * 1024 * 1 变成 1024 * 1024 * 3了,所以为什么要写 maximum += blocksize[i] * count语句呢?一次增加的粒度不就过大了吗?
计算结果也就不准确了啊。。。
好难表述我的意思,大佬们还求解释一下啊
|