64,683
社区成员
发帖
与我相关
我的任务
分享
template<typename T,int alignByte=随便啥字节对齐>
class AlignedAllocator
{
public:
inline static T* Malloc(size_t size)
{
dbg_code(++counter);
char *ptr,*ptr2,*aligned_ptr;
ptr=new char[size*sizeof(T)+alignByte+sizeof(int)];
ptr2 = ptr + sizeof(int);
aligned_ptr = ptr2 + (alignByte - ((size_t)ptr2 & (alignByte-1) ));
ptr2 = aligned_ptr - sizeof(int);
*((int *)ptr2)=(int)(aligned_ptr - ptr);
return(T*)(aligned_ptr);
}
inline static void Free(T* ptr)
{
int *ptr2=(int *)ptr - 1;
char*const m=(char*)ptr - *ptr2;
delete[] m;
}
private:
STACK_ONLY;
ZTD_NO_COPYABLE(AlignedAllocator);
};