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