xvid算法看到的,不太明白为什么要这样做?

王朝other·作者佚名  2006-01-09
宽屏版  字体: |||超大  

void * xvid_malloc(int size,unsigned char alignment)

{

unsigned char *mem_ptr;

if (!alignment)

{

/* We have not to satisfy any alignment */

if ((mem_ptr = (unsigned char *) malloc(size + 1)) != NULL)

{

/* Store (mem_ptr - "real allocated memory") in *(mem_ptr-1) */

*mem_ptr = 1;

/* Return the mem_ptr pointer */

return (void *)(mem_ptr+1);

}

}

else

{

unsigned char *tmp;

/*

* Allocate the required size memory + alignment so we

* can realign the data if necessary

*/

if ((tmp = (unsigned char *) malloc(size + alignment)) != NULL)

{

/* Align the tmp pointer */

mem_ptr =(unsigned char *) ((unsigned int) (tmp + alignment - 1) &

(~(unsigned int) (alignment - 1)));

/*

* Special case where malloc have already satisfied the alignment

* We must add alignment to mem_ptr because we must store

* (mem_ptr - tmp) in *(mem_ptr-1)

* If we do not add alignment to mem_ptr then *(mem_ptr-1) points

* to a forbidden memory space

*/

if (mem_ptr == tmp)

mem_ptr += alignment;

/*

* (mem_ptr - tmp) is stored in *(mem_ptr-1) so we are able to retrieve

* the real malloc block allocated and free it in xvid_free

*/

*(mem_ptr - 1) = (unsigned char) (mem_ptr - tmp);

/* Return the aligned pointer */

return (void *) mem_ptr;

}

}

return NULL;

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有