void initialize_freelist(int i, int j) { int x=0; printf("Initializing freelist \n"); NODE *temp; int data = (j-i)+1; head_freelist = list_create(data); if(head_freelist==NULL) printf(" Head not created\n"); for(x=(j-i+2);x<=j;x++) { addNodeBottom(x, head_freelist); } printf("free list initialized \n"); print_freelist(head_freelist); }
void initialize_swap_freelist(int i, int j) { int x=0; printf("Initializing swap space freelist \n"); NODE *temp; int data = (j-i)+1; head_freelist_swap = list_create(data); if(head_freelist_swap==NULL) printf(" Head not created\n"); for(x=(j-i+2);x<=i;x++) { addNodeBottom(x, head_freelist_swap); } printf(" ********** SWAP SPACE FREE LIST ********** \n"); print_freelist(head_freelist_swap); }
int main(int argc, char *argv[]) { int size; int itr; void *ptr[BUFLEN]; int i,j; double randvar; int fail = 0; //size_t global[LOOPCNT][2]; long int global[LOOPCNT][2]; clock_t begin, end; double time_spent; for(j = 0; j < LOOPCNT; j++) { global[j][0] = -1; global[j][1] = -1; } /* Set the PSEUDO_RANDOM_SEED for pseduo random seed initialization based on time, i.e., * the random values changes after each execution */ if(PSEUDO_RANDOM_SEED) SEED(time(NULL)); assert(MAX_HEAP_SIZE >= 1024*1024 && "MAX_HEAP_SIZE is too low; Recommended setting is at least 1MB for test_stress2"); for(i=0; i < BUFLEN; i++) { ptr[i] = NULL; } begin = clock(); for(i = 0; i < LOOPCNT; i++) { itr = (int)(RAND() * BUFLEN); randvar = RAND(); if(randvar < ALLOC_CONST && ptr[itr] == NULL) { size = (int)(RAND() * MAX_ALLOC_SIZE); if(size > 0) { ptr[itr] = dmalloc(size); //memset(ptr[itr], 0, size); } else continue; if(ptr[itr] == NULL) { DEBUG("malloc at iteration %d failed for size %d\n", i,size); fflush(stderr); ++fail; continue; } /* Range check */ for(j = 0; j < i; j++) { if(global[j][0] == -1) { continue; } if(((long)ptr[itr] >= global[j][0]) && ((long)ptr[itr]+size <= global[j][1])) { printf("[s] = %ld, [e] = %ld, [p] = %ld, [itr] = %d, [size] = %ld\n", global[j][0], global[j][1], (long)ptr[itr], i, (long)size); printf("Correctness check failed\n"); exit(EXIT_FAILURE); } } global[i][0] = (long)ptr[itr]; global[i][1] = (long)ptr[itr] + (long)size; printf("Assigned: [s] = %ld, [e] = %ld, [p] = %ld, [itr] = %d, [size] = %ld\n", global[i][0], global[i][1], (long)ptr[itr],i, (long)size); } else if(randvar >= ALLOC_CONST && ptr[itr] != NULL) { DEBUG("Freeing ptr[%d]\n", itr); for(j = 0; j < i; j++) { if(global[j][0] == (long)ptr[itr]) { global[j][0] = -1; global[j][1] = -1; } } dfree(ptr[itr]); ptr[itr] = NULL; } } /* * now -- free them * */ for(i=0; i < BUFLEN; i++) { if(ptr[i] != NULL) { dfree(ptr[i]); ptr[i] = NULL; } } end = clock(); print_freelist(); DEBUG("\n"); time_spent = (double)(end - begin) / CLOCKS_PER_SEC; printf("Test case summary\n"); printf("Loop count: %d, malloc successful: %d, malloc failed: %d, execution time: %g seconds\n\n", LOOPCNT, LOOPCNT-fail, fail, time_spent); printf("Stress testcases2 passed!\n"); return 0; }
int main(int argc, char *argv[]) { char *array1, *array2, *array3; int i; printf("malloc(10)\n"); array1 = (char*)dmalloc(10); if(array1 == NULL) { fprintf(stderr,"call to dmalloc() failed\n"); fflush(stderr); exit(1); } for(i=0; i < 9; i++) { array1[i] = 'a'; } array1[9] = '\0'; printf("String: %s\n",array1); assert(strncmp(array1,"aaaaaaaaa",9)==0); printf("malloc(100)\n"); array2 = (char*)dmalloc(100); if(array2 == NULL) { fprintf(stderr,"call to dmalloc() failed\n"); fflush(stderr); exit(1); } for(i=0; i < 99; i++) { array2[i] = 'b'; } array2[99] = '\0'; printf("String: %s\n",array2); assert(strncmp(array2,"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",99)==0); printf("malloc(50)\n"); array3 = (char*)dmalloc(50); if(array3 == NULL) { fprintf(stderr,"call to dmalloc() failed\n"); fflush(stderr); exit(1); } for(i=0; i < 49; i++) { array3[i] = 'c'; } array3[49] = '\0'; printf("String: %s\n",array3); assert(strncmp(array3,"ccccccccccccccccccccccccccccccccccccccccccccccccc",49)==0); printf("free(10)\n"); dfree(array1); printf("After free\n"); print_freelist(); printf("free(50)\n"); dfree(array3); printf("After free\n"); print_freelist(); printf("free(100)\n"); dfree(array2); printf("After free\n"); print_freelist(); printf("malloc(510)\n"); array3 = (char*)dmalloc(510); if(array3 == NULL) { fprintf(stderr,"call to dmalloc() failed\n"); fflush(stderr); exit(1); } for(i=0; i < 509; i++) { array3[i] = 'c'; } array3[509] = '\0'; //assert(strncmp(array3,"ccccccccccccccccccccccccccccccccccccccccccccccccc")==0); printf("malloc(510)\n"); array3 = (char*)dmalloc(510); if(array3 == NULL) { fprintf(stderr,"call to dmalloc() failed\n"); fflush(stderr); //exit(1); // We expect the fail here. So do not exit } printf("Coalescing test cases passed!\n"); return(0); }