|
|
class CMemBuf
{
protected:
int size; // 缓冲区块大小
int num; // 缓冲区块数量
int count; // 当前缓冲区使用数量(堆栈的位置)
char** stack; // 数据堆栈,用来存放内存缓冲区的
char* begin; // 缓冲区起始地址
char* end; // 缓冲区结束地址
public:
CMemBuf(int Num, int Size);
~CMemBuf(void);
char* Lock();
// 锁定一块内存
void UnLock(char * p);
// 释放一块内存
};
CMemBuf::CMemBuf(int Num, int Size)
{
this->num = Num;
this->size = Size;
this->begin = new char[size * num];
this->end = begin + size * num;
this->stack = new char*[num];
this->stack[0] = begin;
for(int i = 1; i < num; i++)
stack = stack[i - 1] + size;
this->count = 0;
}
CMemBuf::~CMemBuf(void)
{
delete begin;
delete stack;
}
// 锁定一块内存
char* CMemBuf: ock()
{
if (count < num)
return stack[count++];
else
return new char[size];
}
// 释放一块内存
void CMemBuf::UnLock(char * p)
{
if (p >= begin && p < end)
stack[--count] = p;
else
delete p;
}
int main(int argc, char* argv[])
{
CMemBuf men(10, 1024 * 4); // 4k buf
char * b1 = men.Lock();
char * b2 = men.Lock();
char * b3 = men.Lock();
printf("%d,%d,%d\n", b1, b2, b3);
men.UnLock(b1);
//men.UnLock(b2);
b1 = men.Lock();
b2 = men.Lock();
printf("%d,%d,%d\n", b1, b2, b3);
return 0;
} |
|