Changeset 686 for soft/giet_vm/giet_libs
- Timestamp:
- Aug 3, 2015, 7:07:03 PM (9 years ago)
- Location:
- soft/giet_vm/giet_libs
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
soft/giet_vm/giet_libs/malloc.c
r680 r686 431 431 } // end free() 432 432 433 //////////////////////434 // reference: http://stackoverflow.com/a/6563989/4244300435 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 two441 if ( !align || (align & (align - 1)) )442 return NULL;443 444 // reserve memory for data + offset + book-keeping445 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 ptr454 ptr += sizeof(void*);455 ptr += align - ((unsigned int)ptr % align);456 457 // keep original ptr just before the actual data458 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 }474 475 433 // Local Variables: 476 434 // tab-width: 4 -
soft/giet_vm/giet_libs/malloc.h
r678 r686 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);106 107 103 #endif 108 104
Note: See TracChangeset
for help on using the changeset viewer.