马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 houqing1999 于 2023-6-6 09:14 编辑
两个问题,
最后的打印语句maxmum*1.0/1024/1027/1024是啥意思
还有用visual stdio运行能运行但是等好大一会儿都没有结果,但是注意到电脑管家的加速球突然到了90%,加速球60%到90%一跳一跳,怎么解决。
#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 * 1.0 / 1024 / 1024 / 1024 这个表达式的意思。
这个表达式的意思是将maximum的值(字节为单位)转换为GB(Gigabytes)。1024字节(bytes)是1KB(Kilobytes),1024KB是1MB(Megabytes),1024MB是1GB。所以 maximum / 1024 / 1024 / 1024 就是将maximum从字节单位转换成GB单位。这里 * 1.0 的作用是确保结果是浮点数,因为如果两个整数做除法,结果也会是整数,有可能丢失精度。
关于你的第二个问题,这段代码的目的是尝试不断分配内存,直到无法再分配为止,然后记录并打印出能够分配的最大内存大小。由于这个过程中,它尝试申请并释放内存,这可能导致你的程序运行缓慢,并使你的电脑的资源使用率上升。
如果你的程序运行时间过长,那可能是因为你的电脑的内存非常大,以至于代码需要很长的时间才能找到无法分配内存的上限。此外,频繁的内存申请和释放也会消耗CPU资源,这可能是导致你电脑管家的加速球突然上升的原因。
关于解决办法,你可能需要考虑一下是否有必要运行这段代码。这段代码主要用来测试你的电脑能分配的最大内存,但在实际编程中,我们通常不会试图分配电脑所有的内存。如果你确定需要运行这段代码,那么请确保你的电脑有足够的内存和CPU资源,并做好可能会花费一段时间的准备。你也可以考虑修改代码,比如减小尝试分配内存的次数,或者增大每次尝试分配内存的大小,以此来减少总的运行时间。
|