⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mem_align.c

📁 经典的MP4编解码核心库
💻 C
字号:
/**************************************************************************
 *
 *	History:
 *  01.06.2002  imported from mem_align.c from XVID MPEG-4 VIDEO CODEC
 *
 *************************************************************************/

#include <stdlib.h>
#include <stdio.h>
#include "mem_align.h"

void *alloc_aligned_mem(size_t size, uint8_t alignment)
{
	uint8_t *mem_ptr;
	uint8_t *tmp;

	if(alignment)
	{	
		if((tmp = (uint8_t *) malloc(size + alignment)) != NULL)
		{

			// Align the pointer 
			mem_ptr = (uint8_t *)((uint32_t)(tmp + alignment - 1)&(~(uint32_t)(alignment - 1)));

			if(mem_ptr == tmp) mem_ptr += alignment;
			
			 // modified offset is stored in *(mem_ptr-1) 
			*(mem_ptr - 1) = (uint8_t)(mem_ptr - tmp);
			
			return (void *) mem_ptr;
		}
	}
	else
	{
		// No alignment is needed
		if((mem_ptr = (uint8_t *) malloc(size + 1)) != NULL)
		{
			*mem_ptr = 0;		
			return (void *) mem_ptr++;
		}

	}

	return NULL;
}

void free_aligned_mem(void *mem_ptr)
{

	uint32_t offset = *((uint8_t*)mem_ptr - 1);
	free((uint8_t*)mem_ptr - offset);

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -