内存池 示例一

内存池是一种管理内存分配和释放的技术,用于优化内存的使用效率。它通过预先分配一块内存区域,并将其划分为多个较小的块(内存块池),然后按需分配这些内存块来减少内存碎片化和频繁的系统调用。这些内存块可以是相同大小,也可以是不同大小的。

内存池的优点包括:

减少内存碎片化:由于预先分配了一块连续的内存,分配和释放内存的开销减少,从而降低了内存碎片化的可能性。

提高内存分配效率:避免了频繁的系统调用,因为内存池可以重复利用已分配的内存块。

降低系统开销:内存分配和释放的次数减少,可以提高系统性能。

实现内存池的方式有很多种,可以使用标准库提供的内存池实现,也可以手动编写。通常,内存池会提供 allocate() 和 deallocate() 等方法来分配和释放内存块。

以下是一个简单的自定义内存池的示例:

#include 
#include 

class MemoryPool {
private:
    std::vector<char*> memoryBlocks;
    size_t blockSize;

public:
    MemoryPool(size_t blockSize) : blockSize(blockSize) {}

    char* allocate() {
        char* block = new char[blockSize];
        memoryBlocks.push_back(block);
        return block;
    }

    void deallocate(char* block) {
        // 找到要释放的内存块并释放
        auto it = std::find(memoryBlocks.begin(), memoryBlocks.end(), block);
        if (it != memoryBlocks.end()) {
            delete[] *it;
            memoryBlocks.erase(it);
        }
    }

    ~MemoryPool() {
        // 释放所有内存块
        for (char* block : memoryBlocks) {
            delete[] block;
        }
    }
};

int main() {
    MemoryPool pool(1024); // 创建内存池,每个块大小为1024字节

    char* mem1 = pool.allocate(); // 分配内存块
    char* mem2 = pool.allocate();

    pool.deallocate(mem1); // 释放内存块
    pool.deallocate(mem2);

    return 0;
}

你可能感兴趣的:(算法,c++,内存池)