Changeset 678
- Timestamp:
- Jul 29, 2015, 5:52:17 PM (9 years ago)
- Location:
- soft/giet_vm/giet_libs
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
soft/giet_vm/giet_libs/malloc.c
r588 r678 431 431 } // end free() 432 432 433 434 433 ////////////////////// 434 // reference: http://stackoverflow.com/a/6563989/4244300 435 void * almalloc( unsigned int align, unsigned int size ) 436 { 437 unsigned int total_size; 438 void* ptr; 439 440 // check if align is a power of two 441 if ( !align || (align & (align - 1)) ) 442 return NULL; 443 444 // reserve memory for data + offset + book-keeping 445 total_size = size + align + sizeof(void*); 446 ptr = malloc( total_size ); 447 448 if ( ptr ) 449 { 450 void* start = ptr; 451 void** book; 452 453 // find aligned ptr 454 ptr += sizeof(void*); 455 ptr += align - ((unsigned int)ptr % align); 456 457 // keep original ptr just before the actual data 458 book = ptr - sizeof(void*); 459 *book = start; 460 } 461 462 return ptr; 463 } 464 465 ////////////////////// 466 void alfree( void* ptr ) 467 { 468 if ( ptr ) 469 { 470 void** book = ptr - sizeof(void*); 471 free(*book); 472 } 473 } 435 474 436 475 // Local Variables: -
soft/giet_vm/giet_libs/malloc.h
r588 r678 101 101 extern void free(void * ptr); 102 102 103 extern void* almalloc (unsigned int align, unsigned int size ); 104 105 extern void alfree(void * ptr); 103 106 104 107 #endif
Note: See TracChangeset
for help on using the changeset viewer.