xue@1: //--------------------------------------------------------------------------- xue@1: xue@1: xue@1: #include xue@1: #include xue@1: #include "align8.h" xue@1: xue@1: //--------------------------------------------------------------------------- xue@1: /* xue@1: function malloc8: 8-byte (64-bit) aligned memory allocation. xue@1: xue@1: Returns pointer to a memory block of $size starting at an address divisible by 8. xue@1: */ xue@1: void* malloc8(unsigned size) xue@1: { xue@1: char *buffer, *result; xue@1: buffer=(char*)malloc(size+8+sizeof(void*)); xue@1: if(!buffer) return(NULL); xue@1: char* tmp=&buffer[sizeof(void*)]; xue@1: result=&((char*)((unsigned)tmp&0xFFFFFFF8))[8]; xue@1: ((void**)result)[-1]=buffer; xue@1: return(result); xue@1: }//malloc8 xue@1: xue@1: /* xue@1: function free8: deallocation for malloc8() xue@1: xue@1: No return value. xue@1: */ xue@1: void free8(void* buffer8) xue@1: { xue@1: if (buffer8) free(((void**)buffer8)[-1]); xue@1: }//free8