精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何用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-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

2025-04-22 03:00:00

2010-01-13 18:44:03

C++編譯

2011-07-20 14:33:19

C++IO

2010-01-25 13:43:09

C++算術編碼

2011-04-11 09:47:50

C++內存管理

2014-06-04 13:19:29

C++ndk安卓開發

2015-11-30 11:14:59

C++對象池自動回收

2019-09-29 00:25:11

CC++內存泄漏

2023-10-26 11:03:50

C語言宏定義

2025-03-04 04:00:00

C++代碼windows

2024-01-15 06:01:36

C++數組

2010-01-26 15:51:06

C++變量

2009-08-19 09:57:01

C++ RAII

2025-10-17 09:18:16

點贊
收藏

51CTO技術棧公眾號

国产无套在线观看| 欧美午夜精品理论片a级按摩| 欧美一区二区啪啪| 久久久久久欧美精品色一二三四| 一本一本久久a久久| xxxx成人| 99久久影视| 国产精品综合一区二区三区| 亚洲美女视频网| 亚洲中文字幕无码一区二区三区| 最新中文字幕在线观看视频| 成人av综合网| 中文字幕在线观看一区二区| 亲子乱一区二区三区电影| 人妻精品久久久久中文字幕69| 成人高清在线| 老司机午夜精品视频在线观看| 欧美xxxxxxxxx| 亚洲成人蜜桃| 最近中文字幕免费观看| 亚洲字幕久久| 欧美军同video69gay| 色狠狠久久av五月综合|| 91精品国产综合久久久蜜臀九色| 97久久综合精品久久久综合| 色婷婷激情一区二区三区| 成人免费视频观看视频| 日韩一区二区三区四区在线| 91精品国产自产观看在线| 国产日产欧美精品一区二区三区| 91精品国产网站| 国产又粗又猛又色| 韩日毛片在线观看| 99re这里只有精品6| 97精品在线观看| 免费的av网站| 日韩精品免费视频一区二区三区| 亚洲色图在线播放| 成人日韩av在线| 尤物在线免费视频| 国产日韩欧美中文在线| 一区二区三区免费看视频| 99国产高清| 国产午夜免费视频| 麻豆国产一区| 亚洲午夜成aⅴ人片| 韩国成人动漫在线观看| 999这里只有精品| 国产精品最新| 欧美日韩一级黄| 中文字幕在线中文| 亚洲欧美日韩精品永久在线| 久久不射中文字幕| 日韩在线观看免费av| 欧美激情国内自拍| 丰满大乳少妇在线观看网站| 亚洲色图视频网站| 在线码字幕一区| 午夜精品久久久久久久第一页按摩| 精品999网站| 一区二区欧美久久| 97超碰人人看| 欧美成人黑人| 亚洲女与黑人做爰| 久久久av水蜜桃| 秋霞欧美在线观看| 日本aⅴ精品一区二区三区| 中国一区二区三区| 桃色一区二区| 奇米在线7777在线精品| 庆余年2免费日韩剧观看大牛| 日韩aaaaaa| 国产亚洲欧洲| 欧美一级片在线| 免费不卡av在线| 成年人在线观看视频| 久久久精品国产免大香伊 | 成人网在线视频| 一级特黄aaa大片| 欧美一区成人| 国产性色av一区二区| 手机免费看av网站| 久久69av| 亚洲精品电影在线| 亚洲a级黄色片| 极品视频在线| 色狠狠综合天天综合综合| 青青草原网站在线观看| 黄色大片在线免费观看| 成人一区二区三区| 国产精品一区二区性色av| 中文字幕一区二区三区手机版 | 久久精品欧美日韩精品| 亚洲视频电影| 日本免费一区二区三区最新| 九一九一国产精品| 欧洲美女免费图片一区| 久久影视中文字幕| 99国产精品| 久久99精品久久久久久青青91 | 欧美日韩怡红院| 成人高潮aa毛片免费| 欧美午夜激情小视频| 2019日韩中文字幕mv| 欧美性猛交xxx乱大交3蜜桃| 久久久美女艺术照精彩视频福利播放| 天堂√在线观看一区二区| 18av在线播放| 亚洲欧美另类图片小说| 欧美久久久久久久久久久久久| 亚洲区欧洲区| 樱花草国产18久久久久| 一级黄色免费在线观看| 丝袜美腿美女被狂躁在线观看| 国产亚洲一区二区三区四区| 免费成人深夜夜行网站视频| 欧美调教sm| 欧美视频中文字幕在线| 亚洲色图欧美自拍| 高清在线一区二区| 亚洲摸下面视频| 激情五月少妇a| 国产精品av久久久久久麻豆网| 久久国产精品久久久久久久久久| 国产喷水在线观看| 久久久久午夜电影| 久久成人18免费网站| 国产一区二区播放| 欧美区一区二| 国产精品自产拍在线观| 亚洲欧美综合一区二区| 亚洲精品成人悠悠色影视| 一区二区三区国产免费| 欧美精品中文字幕亚洲专区| 日韩精品小视频| 国产毛片久久久久久| 欧美精品一二| 精品久久久av| 欧美日韩人妻精品一区二区三区| 免费av成人在线| 91九色国产社区在线观看| 国产精品乱码一区二区| 国产精品69久久久久水密桃| 国产精品区一区| 欧洲成人av| 午夜精品一区在线观看| 国产av无码专区亚洲精品| 成人国产一区| 欧美v国产在线一区二区三区| 国产视频精品免费| 免费在线看一区| 天堂社区 天堂综合网 天堂资源最新版 | 久久国产视频播放| 99久久精品费精品国产一区二区| 人人妻人人澡人人爽欧美一区双| 麻豆国产一区二区三区四区| 欧美乱妇40p| 亚洲国产精品suv| 91色在线porny| 亚洲一二区在线| 91av一区| 精品国产一区二区三区久久久| 影音先锋国产资源| 成人av网在线| 偷拍视频一区二区| 素人啪啪色综合| 精品久久一区二区三区| 久草视频在线免费看| 国产91精品在线观看| 色99中文字幕| 国内欧美日韩| 亚洲男人天堂久| 国产又大又黄视频| 国产欧美一区二区精品忘忧草| www.一区二区.com| 福利片一区二区| 日韩中文字在线| 99精品在线视频观看| 99re成人精品视频| 蜜臀久久99精品久久久酒店新书| 欧美二区观看| 午夜精品一区二区三区在线视频| 五月天婷婷社区| 欧美午夜电影在线播放| 国产一二三四区| 不卡欧美aaaaa| 国产精品亚洲αv天堂无码| 日韩欧美视频在线播放| 欧美在线一区二区视频| 高清日韩av电影| 懂色av一区二区三区| 免费欧美一级片| 国产欧美日韩一级| 一区二区三区免费看| 国产精品xxx在线观看| 国产成人精品综合| 午夜在线视频免费| 在线一区二区视频| av在线网站观看| 一本久久综合| 亚洲成人网上| 国产精品极品在线观看| 国产精品福利在线| 青青国产在线| 制服丝袜日韩国产| 正在播放国产对白害羞| 午夜一级久久| 国产在线一区二区三区欧美| 国产蜜臀一区二区打屁股调教| 亚洲欧美另类在线观看| 国产视频在线一区| 色哟哟在线观看一区二区三区| 国产人妻精品一区二区三区不卡| 久久丝袜美腿综合| 日韩黄色片视频| 小处雏高清一区二区三区| 开心色怡人综合网站| 中文在线а√在线8| 亚洲国产一区自拍| 国产又粗又猛又爽又黄的| 精品成人av一区| 国产麻豆天美果冻无码视频| 国产精品亚洲综合色区韩国| 一区二区三区一级片| 国产成人黄色| 狠狠爱一区二区三区| 精品视频一区二区三区| 国产精品久久一区主播| av电影在线观看| 欧美高清性hdvideosex| 69成人免费视频| 亚洲一区二区三区四区不卡| 四虎影视一区二区| 国产欧美日韩一区二区三区在线观看| 国产一级免费片| 西西裸体人体做爰大胆久久久| 天天干天天色天天爽| 久久亚洲国产| 99精品欧美一区二区三区| 九九久久国产| 国产精品露脸av在线| 亚洲淫成人影院| 色综合伊人色综合网| av网站在线免费看| 五月婷婷色综合| 久久一区二区三| 久久亚洲私人国产精品va媚药| 中国特级黄色片| 久久久成人网| 欧美性大战久久久久xxx| 欧美综合久久| www日韩av| 欧美精品三级在线| 91亚色免费| 日韩大片欧美大片| 91精品国产一区| 美女av在线免费看| 欧美综合在线第二页| 东京一区二区| 国产精品扒开腿爽爽爽视频| 视频精品导航| 91九色综合久久| 深夜福利一区| 精品国产乱码久久久久软件| 丝袜美腿综合| 92国产精品视频| 中文字幕高清在线播放| 日本久久久a级免费| 在线āv视频| 欧美高清在线观看| 国产精品秘入口| 日韩视频在线免费观看| 成码无人av片在线观看网站| 日韩精品在线视频| 欧美视频免费一区二区三区| 日韩精品中文字幕在线不卡尤物 | 亚洲夜间福利| 免费毛片小视频| 日韩av不卡一区二区| 777一区二区| 国产精品小仙女| 自拍视频一区二区| 国产精品午夜在线| 精品久久久久久中文字幕人妻最新| 国产亚洲欧洲997久久综合| 一本一本久久a久久| 亚洲国产欧美日韩另类综合 | 樱花草www在线| 成人精品视频网站| 日本性高潮视频| 成人免费毛片片v| 亚洲一区二区三区蜜桃| 成人avav在线| 色撸撸在线视频| 亚洲尤物视频在线| 国产天堂第一区| 欧美不卡123| yourporn在线观看视频| 欧美激情乱人伦| 国产精品99久久久久久董美香 | 国产欧美日韩精品一区二区免费| 亚洲午夜久久久影院伊人| 精品不卡视频| www欧美激情| 日韩电影在线免费看| 欧美 日韩精品| 久久综合综合久久综合| 不卡的av中文字幕| 男人操女人的视频在线观看欧美| 亚洲AV无码久久精品国产一区| 91色在线porny| 欧美日韩亚洲国产另类| 欧美调教femdomvk| 午夜成人免费影院| 欧美裸体xxxx极品少妇| 97成人超碰| 久久久久一区二区| 欧美黄色一区二区| 69久久久久久| 国产喂奶挤奶一区二区三区| 久久9999久久免费精品国产| 欧美美女直播网站| 国模精品一区二区| 97香蕉久久夜色精品国产| 欧美专区视频| 宅男噜噜99国产精品观看免费| 久久国产精品久久w女人spa| 中文字幕99页| av午夜一区麻豆| 日本黄色网址大全| 亚洲五码中文字幕| 亚洲国产精品视频在线| 久久天天躁狠狠躁夜夜躁| 成人福利一区二区| 亚洲成人自拍视频| 丝袜脚交一区二区| 日本少妇色视频| 亚洲va欧美va人人爽午夜| 亚洲精品18在线观看| 欧美精品一二区| 久久精品一级| 麻豆视频传媒入口| 国产一区二区视频在线| 国产日韩视频一区| 一区二区不卡在线播放| 成人av无码一区二区三区| 久久av资源网站| 日韩一区网站| 韩日视频在线观看| 成人av资源网站| 亚洲男人第一av| 亚洲精品美女久久| 综合日韩av| 日本精品一区二区| 影音先锋日韩在线| 亚洲综合123| 一区二区免费在线| 亚洲国产福利视频| 性欧美亚洲xxxx乳在线观看| 女同一区二区三区| 日韩中文字幕三区| 久久男人中文字幕资源站| 97人妻一区二区精品视频| 日韩欧美另类在线| 美女尤物在线视频| 国产精品私拍pans大尺度在线| 精品国产一区探花在线观看| 三级视频中文字幕| 亚洲女同女同女同女同女同69| 国产国语亲子伦亲子| 国外成人免费在线播放| 日韩成人免费av| 快播日韩欧美| 日韩不卡免费视频| 免费黄色国产视频| 日韩欧美一区二区久久婷婷| zzzwww在线看片免费| 欧美午夜欧美| 亚洲三级观看| 亚洲网中文字幕| 亚洲狠狠爱一区二区三区| 亚洲av成人无码网天堂| 国产精品午夜视频| 亚洲欧美一级二级三级| 精品国产人妻一区二区三区| 色欧美88888久久久久久影院| 在线观看麻豆| 国产麻豆一区二区三区在线观看| 免费精品视频| 超碰手机在线观看| 亚洲欧美综合精品久久成人| 华人av在线| 亚洲自拍的二区三区| www.欧美亚洲| 亚洲一区二区影视| 午夜精品久久17c| 日韩欧美高清在线播放| 久久精品女同亚洲女同13| 亚洲激情欧美激情| 久久久久久久久亚洲精品|