我不懂bulk跟butterfly有啥区别
有没有哪位老大讲解一下
是一个作业的问题
Template Meta-programming
作业的要求是写个List
要求支持bulk或者butterfly
List<Generator<char*, Array, Butterfly, Pointer, FIFO >::generator > list;
List<Generator<char*, Array, Bulk, Pointer, FIFO >::generator > list;
我是这么处理的
我觉得我似乎是误解了这个东西了
总觉得bulk是动态allocate一个内存位置
butterfly是固定分配一个内存位置,然后把东西付与给他。
也有可能我从头就完全理解错了这个meta-programming的意思了
有没有哪位老大讲解一下
是一个作业的问题
Template Meta-programming
作业的要求是写个List
要求支持bulk或者butterfly
List<Generator<char*, Array, Butterfly, Pointer, FIFO >::generator > list;
List<Generator<char*, Array, Bulk, Pointer, FIFO >::generator > list;
我是这么处理的
#pragma once
template<class Storagebase,int size>
class MemAllocBulk
{
protected:
int index;
public:
MemAllocBulk(void){ index = 0; };
LPVOID MemAllocNext(void);
};
template<class Storagebase,int size>
LPVOID MemAllocBulk<Storagebase, size>::MemAllocNext(void){
if (index == size) return NULL;
++index;
LPVOID Next = ::VirtualAlloc(0, sizeof(Storagebase), MEM_COMMIT, PAGE_READWRITE);
return Next;
}
#pragma once
template<class Storagebase, int size>
class MemAllocButterfly
{
protected:
DWORD dwOffset;
DWORD dwNextOffset;
int index;
public:
MemAllocButterfly(void);
LPVOID MemAllocNext(void);
void MemRead(void);
};
template<class Storagebase,int size>
MemAllocButterfly<Storagebase, size>::MemAllocButterfly(void)
{
dwOffset = (DWORD)GlobalAlloc(GMEM_ZEROINIT, sizeof(Storagebase) * size);
dwNextOffset = dwOffset;
index = 0;
MemRead();
}
template<class Storagebase,int size>
LPVOID MemAllocButterfly<Storagebase, size>::MemAllocNext(void){
if (index == size) return NULL;
++index;
LPVOID Next = (LPVOID)dwNextOffset;
dwNextOffset += sizeof(Storagebase);
return Next;
}
我觉得我似乎是误解了这个东西了
总觉得bulk是动态allocate一个内存位置
butterfly是固定分配一个内存位置,然后把东西付与给他。
也有可能我从头就完全理解错了这个meta-programming的意思了