malloc求助
只是一个检测malloc能申请多大内存,问题是第10行把long long换成int就不行,1024*1024在int的范围内.
发代码 本帖最后由 赚小钱 于 2021-8-21 22:57 编辑
请打印count×size ,我怀疑第10行使用int时会越界出现负数 人造人 发表于 2021-8-20 21:18
发代码
代码如下,谢谢大佬
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
long long max=0;
char* ptr=NULL;
/*下面把int换成long long就可以出结果,为什么,求解答,感激不尽*/
int size[]={1024*1024,1024,1}; //从大到小依次寻找范围
for(int i=0;i<3;i++)
{
for(int count=1;;count++)
{
ptr=(char*)malloc(max+size*count);
if(ptr==NULL)
{
max+=(count-1)*size;
break;
}
free(ptr);
}
}
printf("最多可以申请%.2lfGB",max*1.0/(1024*1023*1024));
} size数组元素换int,malloc行size*count俩int相乘不还是int,内存申请得太慢了。
这还没算上OF,OF后直接整个负数出来,还好malloc参数是unsigned,顶多看成数字变小。。在vs2019跑看内存监控内存申请速率很慢,而且速度一跳一跳的,就是两个原因综合结果
此外,用long long照样OF,内存申请速率不稳就是证明。
顺便看看c的整型提升。
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
long long max=0;
char* ptr=NULL;
/*下面把int换成long long就可以出结果,为什么,求解答,感激不尽*/
//long long size[]={1024*1024,1024,1}; //从大到小依次寻找范围
int size[]={1024*1024,1024,1}; //从大到小依次寻找范围
for(int i=0;i<3;i++)
{
for(int count=1;;count++)
{
ptr=(char*)malloc(max+size*count);
if(ptr==NULL)
{
max+=(count-1)*size;
printf("max: %lld, count: %d\n", max, count);
break;
}
free(ptr);
}
}
//printf("最多可以申请%.2lfGB",max*1.0/(1024*1023*1024));
printf("最多可以申请%.2lfGB\n",max*1.0/(1024*1024*1024));
}
本帖最后由 人造人 于 2021-8-22 01:40 编辑
第 22 行,count 和 size 都是 int 类型,(count - 1) * size 的结果也是 int 类型
当 count 是 2808 的时候溢出了,max 成了负数
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
long long max=0;
char* ptr=NULL;
/*下面把int换成long long就可以出结果,为什么,求解答,感激不尽*/
//long long size[]={1024*1024,1024,1}; //从大到小依次寻找范围
int size[]={1024*1024,1024,1}; //从大到小依次寻找范围
for(int i=0;i<3;i++)
{
for(int count=1;;count++)
{
size_t s = max + size * count;
printf("s: %u, count: %d\n", s, count);
ptr=(char*)malloc(s);
//ptr=(char*)malloc(max+size*count);
if(ptr==NULL)
{
//max+=(count-1)*size;
max+=(long long)(count-1)*size;
printf("max: %lld, count: %d\n", max, count);
break;
}
free(ptr);
}
}
//printf("最多可以申请%.2lfGB",max*1.0/(1024*1023*1024));
printf("最多可以申请%.2lfGB\n",max*1.0/(1024*1024*1024));
}
赚小钱 发表于 2021-8-21 22:56
请打印count×size ,我怀疑第10行使用int时会越界出现负数
谢谢 人造人 发表于 2021-8-22 01:39
谢谢 HgenAA 发表于 2021-8-22 00:19
size数组元素换int,malloc行size*count俩int相乘不还是int,内存申请得太慢了。
这还没算上OF,OF后直接 ...
谢谢
页:
[1]