[求助]一个关于memory allocation的问题

陪你去看龙卷风

新手上路
VIP
注册
2002-10-12
消息
11,271
荣誉分数
61
声望点数
0
我不懂bulk跟butterfly有啥区别
有没有哪位老大讲解一下

:D 是一个作业的问题
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的意思了:crying:
 
后退
顶部