字节对齐重写malloc 和 free

来源:互联网 发布:msdn win7 优化 编辑:程序博客网 时间:2024/05/22 01:04

 void* MemAllocAlign( size_t size, size_tt AlignCount )
 {
  void * pBlock = NULL;

  void * pBlockAligned = NULL;

  pBlock = malloc( size + AlignCount );

  size_t mask = AlignCount - 1;

  // align the buffer with nAlign
  if( !((size_t)pBlock & mask) )
  {
   pBlockAligned = (char*)pBlock + AlignCount;
  }
  else
  {
   pBlockAligned = (void*)(( (size_t)pBlock + mask ) & ~mask );
  }

  // save the offset
  *((char *)pBlockAligned - 1) = (char)((char *)pBlockAligned - (char *)pBlock);
  return pBlockAligned;
 }


 // free memory block allocated by MallocAlign
 void FreeAlign(void *pMem)
 {
  if (pMem == NULL)
   return;

  char *pui8Buf = (char *)pMem;
  pui8Buf -= pui8Buf[-1];
  free(pui8Buf);
 }