---
title: memorypool.h
description: "```"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/API/ascendtb/ascendtb_0068.html
sourcePath: /source/zh/canncommercial/900/API/ascendtb/ascendtb_0068.html
indexId: 1cba0d23cf3d0b0dd7174ef92fcd9353b773f3f1600074f14d68c9f8ed6e512a61
---
# memorypool.h

```
#ifndef MEMORYPOOL_H
#define MEMORYPOOL_H
#include <vector>
#include <unordered_map>
#include <mutex>
#include <atomic>
#include "memory_env.h"
// Device内存池
class MemoryPool {
public:
explicit MemoryPool(size_t poolSize);
~
MemoryPool();
// 分配内存块
void AllocateBlock(uint32_t size, int &blockId);
// 释放内存块
void FreeBlock(int blockId);
// 获取内存块的物理地址
void GetBlockPtr(int blockId, void *&addr);
private:
// 生成内存块索引
uint64_t GenerateBlocksId();
std::atomic<uint64_t> id_ = 0;
std::mutex blockMutex_;
void *baseMemPtr_ = nullptr;
void *curMemPtr_ = nullptr;
int64_t remainSize_ = 0;
std::unordered_map<int, MemoryBlock> freeBlocks_;
std::unordered_map<int, MemoryBlock> usedBlocks_;
};
#endif
```
