Changeset 3e91703
- Timestamp:
- Jul 19, 2019, 4:50:37 PM (5 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- e723100
- Parents:
- 3f654ec
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
tests/heap.cfa
r3f654ec r3e91703 10 10 // Created On : Tue Nov 6 17:54:56 2018 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Dec 11 21:52:40 201813 // Update Count : 1 812 // Last Modified On : Fri Jul 19 08:22:34 2019 13 // Update Count : 19 14 14 // 15 15 … … 29 29 #define __U_DEFAULT_MMAP_START__ (512 * 1024 + 1) 30 30 size_t default_mmap_start() __attribute__(( weak )) { 31 31 return __U_DEFAULT_MMAP_START__; 32 32 } // default_mmap_start 33 33 … … 36 36 37 37 void main( Worker & ) { 38 39 40 41 42 43 44 38 enum { NoOfAllocs = 5000, NoOfMmaps = 10 }; 39 char * locns[NoOfAllocs]; 40 int i; 41 42 // check alloc/free 43 44 for ( j; 40 ) { 45 45 for ( i; NoOfAllocs ) { 46 46 locns[i] = alloc( i ); … … 67 67 free( locns[i] ); 68 68 } // for 69 70 71 72 73 69 } // for 70 71 // check malloc/free (sbrk) 72 73 for ( i; NoOfAllocs ) { 74 74 size_t s = (i + 1) * 20; 75 75 char * area = (char *)malloc( s ); … … 78 78 area[malloc_usable_size( area ) - 1] = '\345'; // fill ultimate byte 79 79 free( area ); 80 81 82 80 } // for 81 82 for ( i; NoOfAllocs ) { 83 83 size_t s = i + 1; // +1 to make initialization simpler 84 84 locns[i] = (char *)malloc( s ); … … 86 86 locns[i][0] = '\345'; locns[i][s - 1] = '\345'; // fill first/last 87 87 locns[i][malloc_usable_size( locns[i] ) - 1] = '\345'; // fill ultimate byte 88 89 88 } // for 89 for ( i; NoOfAllocs ) { 90 90 size_t s = i + 1; 91 91 if ( locns[i][0] != '\345' || locns[i][s - 1] != '\345' || 92 92 locns[i][malloc_usable_size( locns[i] ) - 1] != '\345' ) abort( "malloc/free corrupt storage" ); 93 93 free( locns[i] ); 94 95 96 97 98 94 } // for 95 96 // check malloc/free (mmap) 97 98 for ( i; NoOfMmaps ) { 99 99 size_t s = i + default_mmap_start(); // cross over point 100 100 char * area = (char *)malloc( s ); … … 103 103 area[malloc_usable_size( area ) - 1] = '\345'; // fill ultimate byte 104 104 free( area ); 105 106 107 105 } // for 106 107 for ( i; NoOfMmaps ) { 108 108 size_t s = i + default_mmap_start(); // cross over point 109 109 locns[i] = (char *)malloc( s ); … … 111 111 locns[i][0] = '\345'; locns[i][s - 1] = '\345'; // fill first/last 112 112 locns[i][malloc_usable_size( locns[i] ) - 1] = '\345'; // fill ultimate byte 113 114 113 } // for 114 for ( i; NoOfMmaps ) { 115 115 size_t s = i + default_mmap_start(); // cross over point 116 116 if ( locns[i][0] != '\345' || locns[i][s - 1] != '\345' || 117 117 locns[i][malloc_usable_size( locns[i] ) - 1] != '\345' ) abort( "malloc/free corrupt storage" ); 118 118 free( locns[i] ); 119 120 121 122 123 119 } // for 120 121 // check calloc/free (sbrk) 122 123 for ( i; NoOfAllocs ) { 124 124 size_t s = (i + 1) * 20; 125 125 char * area = (char *)calloc( 5, s ); … … 131 131 area[malloc_usable_size( area ) - 1] = '\345'; // fill ultimate byte 132 132 free( area ); 133 134 135 133 } // for 134 135 for ( i; NoOfAllocs ) { 136 136 size_t s = i + 1; 137 137 locns[i] = (char *)calloc( 5, s ); … … 142 142 locns[i][0] = '\345'; locns[i][s - 1] = '\345'; // fill first/last 143 143 locns[i][malloc_usable_size( locns[i] ) - 1] = '\345'; // fill ultimate byte 144 145 144 } // for 145 for ( i; NoOfAllocs ) { 146 146 size_t s = i + 1; 147 147 if ( locns[i][0] != '\345' || locns[i][s - 1] != '\345' || 148 148 locns[i][malloc_usable_size( locns[i] ) - 1] != '\345' ) abort( "calloc/free corrupt storage3" ); 149 149 free( locns[i] ); 150 151 152 153 154 150 } // for 151 152 // check calloc/free (mmap) 153 154 for ( i; NoOfMmaps ) { 155 155 size_t s = i + default_mmap_start(); // cross over point 156 156 char * area = (char *)calloc( 1, s ); … … 162 162 area[malloc_usable_size( area ) - 1] = '\345'; // fill ultimate byte 163 163 free( area ); 164 165 166 164 } // for 165 166 for ( i; NoOfMmaps ) { 167 167 size_t s = i + default_mmap_start(); // cross over point 168 168 locns[i] = (char *)calloc( 1, s ); … … 173 173 locns[i][0] = '\345'; locns[i][s - 1] = '\345'; // fill first/last 174 174 locns[i][malloc_usable_size( locns[i] ) - 1] = '\345'; // fill ultimate byte 175 176 175 } // for 176 for ( i; NoOfMmaps ) { 177 177 size_t s = i + default_mmap_start(); // cross over point 178 178 if ( locns[i][0] != '\345' || locns[i][s - 1] != '\345' || 179 179 locns[i][malloc_usable_size( locns[i] ) - 1] != '\345' ) abort( "calloc/free corrupt storage6" ); 180 180 free( locns[i] ); 181 182 183 184 185 181 } // for 182 183 // check memalign/free (sbrk) 184 185 enum { limit = 64 * 1024 }; // check alignments up to here 186 186 187 187 for ( a; libAlign() ~= limit ~ a ) { // generate powers of 2 … … 198 198 free( area ); 199 199 } // for 200 201 202 200 } // for 201 202 // check memalign/free (mmap) 203 203 204 204 for ( a; libAlign() ~= limit ~ a ) { // generate powers of 2 … … 216 216 free( area ); 217 217 } // for 218 219 220 221 222 218 } // for 219 220 // check calloc/realloc/free (sbrk) 221 222 for ( i; 1 ~ 10_000 ~ 12 ) { 223 223 // initial N byte allocation 224 224 char * area = (char *)calloc( 5, i ); … … 237 237 } // for 238 238 free( area ); 239 240 241 242 243 239 } // for 240 241 // check calloc/realloc/free (mmap) 242 243 for ( i; 1 ~ 10_000 ~ 12 ) { 244 244 // initial N byte allocation 245 245 size_t s = i + default_mmap_start(); // cross over point … … 259 259 } // for 260 260 free( area ); 261 262 263 264 265 261 } // for 262 263 // check memalign/realloc/free 264 265 size_t amount = 2; 266 266 for ( a; libAlign() ~= limit ~ a ) { // generate powers of 2 267 267 // initial N byte allocation … … 286 286 } // for 287 287 free( area ); 288 289 290 288 } // for 289 290 // check cmemalign/free 291 291 292 292 for ( a; libAlign() ~= limit ~ a ) { // generate powers of 2 … … 305 305 free( area ); 306 306 } // for 307 308 309 310 311 307 } // for 308 309 // check cmemalign/realloc/free 310 311 amount = 2; 312 312 for ( a; libAlign() ~= limit ~ a ) { // generate powers of 2 313 313 // initial N byte allocation … … 338 338 } // for 339 339 free( area ); 340 340 } // for 341 341 //sout | "worker" | thisTask() | "successful completion"; 342 342 } // Worker main 343 343 344 344 int main() { 345 346 345 const unsigned int NoOfWorkers = 4; 346 { 347 347 processor processors[NoOfWorkers - 1] __attribute__(( unused )); // more than one processor 348 348 Worker workers[NoOfWorkers] __attribute__(( unused )); 349 349 } 350 350 // checkFreeOn(); 351 351 // malloc_stats(); 352 352 } 353 353
Note: See TracChangeset
for help on using the changeset viewer.