43 lines
1.1 KiB
C++
43 lines
1.1 KiB
C++
#include"neicun.h"
|
|
#include <iostream>
|
|
#include <new> // 包含 operator new 和 operator delete 的定义
|
|
|
|
// 构造函数
|
|
ThreadSafeMemoryPool::ThreadSafeMemoryPool(size_t blockSize, size_t blockCount)
|
|
: blockSize_(blockSize), blockCount_(blockCount) {
|
|
init();
|
|
}
|
|
|
|
// 分配内存
|
|
void* ThreadSafeMemoryPool::allocate() {
|
|
std::lock_guard<std::mutex> lock(mutex_);
|
|
if (freeBlocks_.empty()) {
|
|
std::cerr << "Memory pool exhausted!" << std::endl;
|
|
return nullptr;
|
|
}
|
|
void* block = freeBlocks_.back();
|
|
freeBlocks_.pop_back();
|
|
return block;
|
|
}
|
|
|
|
// 释放内存
|
|
void ThreadSafeMemoryPool::deallocate(void* ptr) {
|
|
std::lock_guard<std::mutex> lock(mutex_);
|
|
freeBlocks_.push_back(ptr);
|
|
}
|
|
|
|
// 析构函数
|
|
ThreadSafeMemoryPool::~ThreadSafeMemoryPool() {
|
|
for (void* block : allocatedBlocks_) {
|
|
::operator delete(block); // 使用全局的 operator delete 释放内存
|
|
}
|
|
}
|
|
|
|
// 初始化内存池
|
|
void ThreadSafeMemoryPool::init() {
|
|
for (size_t i = 0; i < blockCount_; ++i) {
|
|
void* block = ::operator new(blockSize_); // 使用全局的 operator new 分配内存
|
|
allocatedBlocks_.push_back(block);
|
|
freeBlocks_.push_back(block);
|
|
}
|
|
} |