国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

如何用C++實現簡單的內存池

開發 前端
內存池(Memory Pool)是計算機編程中一種重要的內存管理技術,它預先分配一塊較大的內存區域,并將其劃分為多個大小相等的內存塊。這種技術旨在減少因頻繁申請和釋放小塊內存而引發的性能開銷。

內存池(Memory Pool)是計算機編程中一種重要的內存管理技術,它預先分配一塊較大的內存區域,并將其劃分為多個大小相等的內存塊。這種技術旨在減少因頻繁申請和釋放小塊內存而引發的性能開銷。下面,我們將結合代碼,一步步講解如何實現一個簡單的內存池,并分析其工作原理。

一、內存池的基本概念

內存池是一種用于動態內存分配的技術,其核心思想是空間換時間。通過預先分配一大塊內存,并將其劃分為多個小塊,內存池能夠快速地為程序提供所需的內存,而無需每次都向操作系統申請。這樣可以大大減少內存分配和釋放的開銷,提高程序的運行效率。

二、內存池的實現步驟

1. 定義內存池類

首先,我們定義一個名為AdvancedMemoryPool的模板類,它接受一個類型參數T和一個默認大小為100的整數參數PoolSize。這個類將用于管理內存池的分配和回收。

template <typename T, size_t PoolSize = 100>
class AdvancedMemoryPool {
    // ...
};

2. 初始化內存池

在類的構造函數中,我們調用expandPool函數來初始化內存池。這個函數將分配一塊大小為PoolSize * sizeof(T)的內存,并將其劃分為PoolSize個大小為sizeof(T)的內存塊。這些內存塊的地址被添加到freeChunks_列表中,表示它們是空閑的,可以被分配。

AdvancedMemoryPool() {
    expandPool();
}

private:
void expandPool() {
    char* newBlock = new char[sizeof(T) * PoolSize];
    for (size_t i = 0; i < PoolSize; ++i) {
        freeChunks_.push_back(reinterpret_cast<T*>(newBlock + i * sizeof(T)));
    }
    pool_.push_back(newBlock);
}

3. 分配內存塊

alloc函數用于從內存池中分配一個空閑的內存塊。它首先檢查freeChunks_列表是否為空。如果為空,則調用expandPool函數來擴展內存池。然后,它從freeChunks_列表中取出一個空閑的內存塊,并將其從列表中移除。最后,返回這個內存塊的地址。

T* alloc() {
    std::lock_guard<std::mutex> lock(mutex_); // 確保線程安全
    if (freeChunks_.empty()) {
        expandPool();
    }

    T* ptr = freeChunks_.front();
    freeChunks_.pop_front();
    return ptr;
}

這里使用了std::lock_guard來確保在多線程環境下的線程安全。當多個線程同時嘗試分配內存時,std::mutex會確保同一時間只有一個線程能夠訪問內存池。

4. 回收內存塊

dealloc函數用于回收一個之前分配的內存塊。它接受一個指向要回收的內存塊的指針,并將這個指針添加到freeChunks_列表中,表示這個內存塊現在是空閑的,可以被再次分配。

void dealloc(T* ptr) {
    assert(ptr != nullptr); // 確保傳入的指針不為空
    std::lock_guard<std::mutex> lock(mutex_); // 確保線程安全
    freeChunks_.push_back(ptr);
}

同樣,這里也使用了std::lock_guard來確保線程安全。

5. 查詢內存池狀態

我們還提供了兩個函數getFreeChunksCount和getUsedChunksCount來查詢內存池的狀態。這兩個函數分別返回空閑和已使用的內存塊數量。

size_t getFreeChunksCount() const {
    std::lock_guard<std::mutex> lock(mutex_); // 確保線程安全
    return freeChunks_.size();
}

size_t getUsedChunksCount() const {
    return PoolSize - getFreeChunksCount();
}

三、使用內存池

在主函數中,我們創建了一個AdvancedMemoryPool對象,并使用它來分配和回收內存塊。通過調用alloc函數,我們可以從內存池中獲取一個空閑的內存塊,并使用它來存儲數據。當我們不再需要這個內存塊時,可以調用dealloc函數將其回收回內存池。

四、完整代碼

#include <iostream>  
#include <list>  
#include <mutex>  
#include <cassert>  
#include <cstdlib>  
  
template <typename T, size_t PoolSize = 100>  
class AdvancedMemoryPool {  
public:  
    AdvancedMemoryPool() {  
        expandPool();  
    }  
  
    ~AdvancedMemoryPool() {  
        std::lock_guard<std::mutex> lock(mutex_);  
        for (auto& chunk : pool_) {  
            delete[] reinterpret_cast<char*>(chunk);  
        }  
    }  
  
    T* alloc() {  
        std::lock_guard<std::mutex> lock(mutex_);  
        if (freeChunks_.empty()) {  
            expandPool();  
        }  
  
        T* ptr = freeChunks_.front();  
        freeChunks_.pop_front();  
        return ptr;  
    }  
  
    void dealloc(T* ptr) {  
        assert(ptr != nullptr);  
        std::lock_guard<std::mutex> lock(mutex_);  
        freeChunks_.push_back(ptr);  
    }  
  
    size_t getFreeChunksCount() const {  
        std::lock_guard<std::mutex> lock(mutex_);  
        return freeChunks_.size();  
    }  
  
    size_t getUsedChunksCount() const {  
        return PoolSize - getFreeChunksCount();  
    }  
  
private:  
    void expandPool() {  
        char* newBlock = new char[sizeof(T) * PoolSize];  
        for (size_t i = 0; i < PoolSize; ++i) {  
            freeChunks_.push_back(reinterpret_cast<T*>(newBlock + i * sizeof(T)));  
        }  
        pool_.push_back(newBlock);  
    }  
  
    mutable std::mutex mutex_;  
    std::list<T*> freeChunks_;  
    std::list<char*> pool_;  
};  
  
// 使用示例  
struct ComplexObject {  
    int data[100];  
    // 假設這是一個復雜的對象,需要動態分配  
};  
  
int main() {  
    AdvancedMemoryPool<ComplexObject> pool;  
  
    ComplexObject* obj1 = pool.alloc();  
    ComplexObject* obj2 = pool.alloc();  
  
    std::cout << "Free chunks: " << pool.getFreeChunksCount() << std::endl;  
    std::cout << "Used chunks: " << pool.getUsedChunksCount() << std::endl;  
  
    pool.dealloc(obj1);  
    pool.dealloc(obj2);  
  
    std::cout << "Free chunks after deallocation: " << pool.getFreeChunksCount() << std::endl;  
    std::cout << "Used chunks after deallocation: " << pool.getUsedChunksCount() << std::endl;  
  
    return 0;  
}
責任編輯:華軒 來源: 鯊魚編程
相關推薦

2025-12-01 01:48:00

2025-08-05 09:24:30

2021-04-04 08:00:39

C++編程語言軟件開發

2020-03-05 15:34:16

線程池C語言局域網

2024-12-31 00:00:15

2010-01-22 13:31:58

C++標準庫

2025-08-11 01:00:00

2010-01-13 18:44:03

C++編譯

2025-04-22 03:00:00

2011-07-20 14:33:19

C++IO

2010-01-25 13:43:09

C++算術編碼

2014-06-04 13:19:29

C++ndk安卓開發

2011-04-11 09:47:50

C++內存管理

2023-10-26 11:03:50

C語言宏定義

2019-09-29 00:25:11

CC++內存泄漏

2010-01-26 15:51:06

C++變量

2025-03-04 04:00:00

C++代碼windows

2015-11-30 11:14:59

C++對象池自動回收

2024-01-15 06:01:36

C++數組

2025-11-28 09:15:03

點贊
收藏

51CTO技術棧公眾號

女人另类性混交zo| 日韩av视屏| 久久免费精品视频在这里| 亚洲精品大尺度| 一区二区三区美女| 91嫩草国产丨精品入口麻豆| 99精品国产福利在线观看免费 | 欧美另类69精品久久久久9999| 日韩人妻精品一区二区三区| 激情欧美一区| 日韩区在线观看| 日韩免费一区二区三区| 欧美精品网站| 国产精品免费区二区三区观看 | www.亚洲人.com| 99久久er| 久久精品视频导航| 国产精品69页| 久久综合九色综合欧美98 | 人人干人人视频| 黄色成人美女网站| 久久精品小视频| 国产精品久久久久久久久久辛辛| 最近2019中文免费高清视频观看www99 | 蜜臀久久久久久久| 青青草原成人| 麻豆传媒一区二区三区| 亚洲精品第一国产综合精品| 直接在线观看的三级网址| 日韩亚洲欧美在线观看| 爱福利在线视频| 亚洲午夜av久久乱码| 天天干天天干天天干天天干天天干| 2021国产精品久久精品| 中文字幕在线综合| 精品日本美女福利在线观看| 超碰在线国产| 日韩激情av在线播放| 日本一区二区三区中文字幕| 久久全国免费视频| 91青青在线视频| 国产一区亚洲一区| 久久手机在线视频| 天天综合亚洲| 在线观看日韩欧美| 成人动漫av| 欧美日韩国产综合新一区| 麻豆app在线观看| 69av一区二区三区| 欧美日韩五区| 91精品国产高清久久久久久| 在线中文一区| 亚洲欧美丝袜| 欧美1级片网站| 久久福利电影| 精品亚洲自拍| 国产精品一区二区电影| 亚洲美女少妇无套啪啪呻吟| 日本人妻伦在线中文字幕| 18成人在线观看| www 日韩| 最近2019年手机中文字幕| 国产中文精品久高清在线不| 久久亚洲免费| 国产日韩欧美一区二区三区综合| 污污的网站在线观看| 亚洲区在线播放| 日韩精品诱惑一区?区三区| 亚洲电影一二三区| 亚洲精品乱码久久久久久久久| mm131午夜| 国产精品电影院| japanese在线播放| 亚洲天堂精品在线观看| 欧美 日本 亚洲| 久久精品123| 国产精品免费一区豆花| 日日夜夜综合| 91在线直播亚洲| 97se亚洲国产综合在线| 性xxxx丰满孕妇xxxx另类| 亚洲精品一区二区三区不| 91caoporn在线| 欧美成人午夜免费视在线看片| 午夜精品999| 国产精品无码一本二本三本色| 91精品国产麻豆国产自产在线| 真不卡电影网| 亚洲女人天堂av| а√在线中文网新版地址在线| 38少妇精品导航| 国产九九视频一区二区三区| 伊人久久av导航| 亚洲www啪成人一区二区麻豆| 欧美电影免费观看| 精品999在线观看| 亚洲在线视频免费观看| 亚洲三级在线| 色中文字幕在线观看| 日本不卡一区二区| 蜜桃视频免费网站| 夜夜嗨av一区二区三区免费区| 亚洲天堂男人| 导航福利在线| 久久久久久中文| 国产成人免费在线| 欧洲性视频在线播放| 国产精品久久久久久免费观看 | 亚洲成人免费影院| 韩国理伦片久久电影网| 亚洲欧美三级伦理| 女生裸体视频一区二区三区| 中文字幕av不卡在线| 日韩中文字幕视频在线| 久久国产精品99精品国产| 亚洲一二三区精品| 欧亚一区二区三区| 97视频热人人精品免费| 日日噜噜夜夜狠狠| 欧美日本高清一区| 久久精子c满五个校花| 国产精品一站二站| 成年人免费在线播放| 日韩在线视频免费观看| 岛国一区二区在线观看| 成人美女黄网站| www.国产二区| 亚洲男人天堂久| 狠狠色狠狠色综合| 毛片在线网站| 男人的天堂成人| 亚洲欧美中文日韩v在线观看| 麻豆精品久久久| 亚洲欧洲自拍| 蜜桃传媒一区二区三区| 国产精品久久久久影院亚瑟| 欧美暴力调教| 国产午夜大地久久| 久久精品电影一区二区| 91视频免费观看| 免费观看亚洲天堂| 免费激情视频在线观看| 91精品国产91| 亚洲国产成人91porn| 亚洲欧美在线专区| 草莓福利社区在线| 精品国产无码在线| 久久这里只有精品99| 一区二区三区在线播放| 欧美人成在线| 成人福利影视| 黄色一级片播放| 日本最新高清不卡中文字幕| 日韩欧美在线观看视频| 国产亚洲成av人片在线观看| 精品一区二区三区毛片| 日韩在线小视频| 亚洲国产成人私人影院tom| 精品美女在线视频| 最新97超碰在线| 日韩欧美视频免费在线观看| 欧美极品美女视频网站在线观看免费| 国产高清久久| av资源种子在线观看| 天堂va久久久噜噜噜久久va| www激情久久| 欧美偷窥清纯综合图区| 免费在线观看一级毛片| 日韩在线电影一区| 日韩在线观看免费高清| 亚洲线精品一区二区三区八戒| 中文一区二区| 日本综合视频| 最新黄色片网站| 亚洲国产另类久久久精品极度| 久久精品成人动漫| 午夜精品福利一区二区三区av | 高潮白浆女日韩av免费看| 性色一区二区| 日韩欧美高清一区二区三区| 欧美少妇一区| 日韩在线不卡视频| 亚洲一区二区在线观| 7m精品福利视频导航| 日韩精品999| 亚洲国产毛片aaaaa无费看| 亚洲激情午夜| 男人的天堂在线视频免费观看 | 久久久影视传媒| 亚洲精品成人无限看| 日本熟妇人妻xxxxx| 国产精品久久久久久亚洲影视 | 91n.com在线观看| 亚洲摸下面视频| 亚洲欧美日韩中文字幕一区二区三区| 亚洲精品乱码| 日韩欧美一级| 黄色美女视频在线观看| xx免费视频| 91av免费观看91av精品在线|