|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
描述1:在做小甲鱼s1e37的题目的时候,小甲鱼的动态内存代码如下:
#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;
}
问题1:我用此代码跑出来是5.37GB,但是我的主机是16GB,安装虚拟机,设置的是4GB,为什么会是这样的结果?
描述2:其实一开始我自己写的代码更加离谱,我是想着在一个while里面不断分配内存,按一个G一个G地分配,但是得出的结果让我更加摸不着头脑
#include <stdio.h>
#include <stdlib.h>
int main(){
// 查看电脑所能分配的最大内存
// 方式1,先分配再释放
char *temp = NULL;
int count = 0;
temp = (char *)malloc(1024LL * 1024 * 1024 * sizeof(char));
printf("%p\n",temp);
while(temp != NULL){
temp = (char *)malloc(1024LL * 1024 * 1024 * sizeof(char));
printf("count = %d\n",count);
count++;
}
// temp = malloc(1024LL * 1024 * 1024);
printf("%d\n",temp == NULL);
printf("%.2fGB\n", count * 1.0);
return 0;
}
求助。 |
|