Im работает над распределением памяти по времени, используя Calloc() с некоторым временем, программа должна попытаться выделить 50 мегабайт и повторить еще 50 мегабайт каждый раз, пока не будет выделено 1500 мегабайт бара. Цель 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, поэтому с любой удачей ваша текущая программа ничего не делает. –