あるタイミングで Calloc() を使用してメモリ割り当ての時間を計るプログラムに取り組んでいます。プログラムは、1500 MB の RAM を割り当てるまで、50 MB を割り当てて、毎回さらに 50 MB ずつ反復する必要があります。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
...