0
我正在使用Calloc()計算內存分配的時間, 該程序應該嘗試並分配50megs並每次迭代50個更多megs,直到它分配1500兆內存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
...
嘗試在每個頁面寫入至少一個字節。新的頁面默認爲零,COW,所以如果運氣好的話,你當前的程序根本就什麼也不做。 –