improved AccumMemoryManager
This commit is contained in:
parent
9265a26b87
commit
924f4ab9f3
@ -1,12 +1,13 @@
|
||||
#pragma once
|
||||
#pragma once
|
||||
|
||||
#include<hgl/type/List.h>
|
||||
#include<hgl/type/DataArray.h>
|
||||
|
||||
namespace hgl
|
||||
{
|
||||
/**
|
||||
* 累计内存管理<br>
|
||||
* 用于不断分配固定容量的内存块,但不动态调整,最后统一释放的情况。
|
||||
* 累计内存管理<br>
|
||||
* 用于不断分配固定容量的内存块,但不动态调整,最后统一释放的情况。
|
||||
*/
|
||||
class AccumMemoryManager
|
||||
{
|
||||
@ -20,43 +21,44 @@ namespace hgl
|
||||
|
||||
private:
|
||||
|
||||
int64 total_bytes=0; ///<总字节数
|
||||
|
||||
DataArray<AccumMemoryManager::Block> block_list;
|
||||
DataArray<char> data_array; ///<数据
|
||||
List<Block> block_list; ///<数据块列表
|
||||
DataArray<char> data_array; ///<数据
|
||||
|
||||
public:
|
||||
|
||||
AccumMemoryManager()=default;
|
||||
~AccumMemoryManager()=default;
|
||||
|
||||
const int64 GetTotalBytes()const{return total_bytes;}
|
||||
const int64 GetBlockCount()const{return block_list.GetCount();}
|
||||
const int64 GetTotalBytes()const{return data_array.GetBytes();} ///<取得总共申请的内存总字节数
|
||||
const int64 GetBlockCount()const{return block_list.GetCount();} ///<取得内存数据块数量
|
||||
|
||||
const void *Acquire(const int64 size)
|
||||
Block *Acquire(const int64 size) ///<申请一块内存
|
||||
{
|
||||
if(size<=0)return(nullptr);
|
||||
|
||||
Block b;
|
||||
Block *b=block_list.Add();
|
||||
|
||||
b.offset=total_bytes;
|
||||
b.size=size;
|
||||
b->offset =data_array.GetBytes();
|
||||
b->size =size;
|
||||
|
||||
data_array.AddCount(size);
|
||||
|
||||
return data_array.GetPointer(b.offset);
|
||||
return b;
|
||||
}
|
||||
|
||||
void *Access(const Block *b) ///<访问一块内存
|
||||
{
|
||||
return b?data_array.GetPointer(b->offset):nullptr;
|
||||
}
|
||||
|
||||
void Clear()
|
||||
{
|
||||
total_bytes=0;
|
||||
block_list.Clear();
|
||||
data_array.Clear();
|
||||
}
|
||||
|
||||
void Free()
|
||||
{
|
||||
total_bytes=0;
|
||||
block_list.Free();
|
||||
data_array.Free();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user