我正在开发一个使用 Calloc() 计时内存分配的程序,该程序应该尝试分配 50megs 并每次迭代 50megs,直到它分配 1500megs 的 ram。createbigthing() 的目标只是创建一些大的东西并释放它。
....
#define oneMeg 1024L*1024L
#define INCREMENT 50
int difftod(struct timeval * tv0, struct timeval * tv1){
return (tv1->tv_sec - tv0->tv_sec)*1000 + (tv1->tv_usec- tv0->tv_usec)/1000;
}
int createbigthing(long int size){
int *test = (int*) calloc(size, (size_t) oneMeg);
if(test == NULL){
return -1;
}
free(test);
return 0;
}
int main(){
long int i;
int rtn;
struct timeval tv0, tv1;
struct timezone tzp;
for(i=INCREMENT;i<=1500;i=i+INCREMENT){
rtn = gettimeofday(&tv0, &tzp); /* set timer T0 */
createbigthing(i);
rtn = gettimeofday(&tv1, &tzp); /* read time T1 */
printf("%d msec\n",difftod(&tv0,&tv1));
}
return 0;
}
我得到的唯一输出是第一次迭代给了我大约 220 毫秒的延迟,然后什么也没有,函数仍然返回 0,所以内存不应该是满的。
输出示例:
220 msec
0 msec
0 msec
0 msec
0 msec
...