|
发表于 2023-6-6 09:57:41
|
显示全部楼层
在你的代码中,使用 blocksize[] = {1024 * 1024, 1024, 1} 来控制每次尝试分配内存的大小,你可以通过调整这个数组的值来修改每次尝试分配内存的大小。例如,你可以将这个数组改为 blocksize[] = {1024 * 1024 * 1024, 1024 * 1024, 1024} ,这样每次尝试分配的内存就从1MB变为1GB,从而减少尝试的次数。
同样,你可以调整每次循环中尝试分配内存的次数。在你的代码中,这个值是由 count 控制的, count 在每次循环中都加1。你可以改变 count++ 这行代码,例如改为 count += 100 ,这样每次循环的时候 count 就会增加100,也就是说每次循环会尝试分配更多的内存。
这是修改后的代码示例:
- #include <stdio.h>
- #include <stdlib.h>
- int main(void)
- {
- void *block;
- int i, count;
- size_t maximum = 0;
- size_t blocksize[] = {1024 * 1024 * 1024, 1024 * 1024, 1024};
- for (i = 0; i < 3; i++)
- {
- for (count = 1; ; count += 100)
- {
- 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;
- }
复制代码
请注意,这种方法可能会导致计算的最大内存值不太准确,因为它尝试分配的内存大小变大了,但如果你的目的只是为了得到一个大概的值,那么这种方法应该就足够了。同时,这样修改可以减少程序的运行时间和系统资源的使用。 |
|