真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

【C++項(xiàng)目】定長內(nèi)存池-創(chuàng)新互聯(lián)

解決固定大小的內(nèi)存申請釋放需求

創(chuàng)新互聯(lián)專注于酒泉網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供酒泉營銷型網(wǎng)站建設(shè),酒泉網(wǎng)站制作、酒泉網(wǎng)頁設(shè)計、酒泉網(wǎng)站官網(wǎng)定制、微信小程序定制開發(fā)服務(wù),打造酒泉網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供酒泉網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

性能達(dá)到極致,不考慮內(nèi)存碎片等問題

第一次:?

#includeusing std::cout;
using std::endl;

templateclass ObjectPool
{
public:
	T* New()
	{
		if (RemainBytes< sizeof(T))//如果剩余的內(nèi)存不足一個對象的大小
		{
			_memory = (char*)malloc(128 * 1024);//128KB空間
			if (_memory == nullptr)
			{
				throw bad_alloc();
			}
		}
		T*obj = (T*)_memory;
		_memory += sizeof(T);
		RemainBytes -= sizeof(T);
		return ojb;
	}
	void Delete(T* obj)
	{
		if (_freeList == nullptr)
		{
			_freeList = obj;
			//*(int*)obj = nullptr;//32位平臺下
			*(void**)obj = nullptr;//解引用看void*大小
		}
	}
private:
	char* _memory = nullptr;//一個char一個字節(jié),往后方便切出內(nèi)存塊,指向大塊內(nèi)存的指針
	void* _freeList = nullptr;//還回來過程中的鏈接的自由鏈表指針
	size_t RemainBytes = 0;//大塊內(nèi)存在切分的過程中剩余的字節(jié)數(shù)
};

內(nèi)存的釋放:

void Delete(T* obj)
	{
		if (_freeList == nullptr)
		{
			_freeList = obj;
			//*(int*)obj = nullptr;//32位平臺下
			*(void**)obj = nullptr;//解引用看void*大小
		}
		else
		{
			*(void**)obj = _freeList;
			_freeList = obj;
		}
	}

===》優(yōu)化成鏈表的頭插

void Delete(T* obj)
	{
		*(void**)obj = _freeList;
		_freeList = obj;
	}

定長內(nèi)存池的完整代碼的實(shí)現(xiàn):

#includeusing std::cout;
using std::endl;

templateclass ObjectPool
{
public:
	T* New()
	{
		T*obj = nullptr;
		//優(yōu)先把還回來的內(nèi)存塊對象再次重復(fù)利用
		if (_freeList)
		{
			void* next = *(void**)_freeList;
			obj = _freeList;//還回來的內(nèi)存塊
			_freeList = next;
		}
		else
		{
			if (_RemainBytes< sizeof(T))//如果剩余的內(nèi)存不足一個對象的大小
			{
				_RemainBytes = 128 * 1024;
				_memory = (char*)malloc(_RemainBytes);//128KB空間
				if (_memory == nullptr)
				{
					throw bad_alloc();
				}
			}
			obj = (T*)_memory;
			size_t objSize = sizeof(T)< sizeof(void*) ? sizeof(void*) : sizeof(T);
			_memory += objSize;
			_RemainBytes -= objSize;
		}
		//定位new,顯示調(diào)用T的構(gòu)造函數(shù)初始化
		new(obj)T;

		return obj;
	}
	void Delete(T* obj)
	{
		obj->~T()//顯示調(diào)用析構(gòu)函數(shù)
		//鏈表的頭插
		*(void**)obj = _freeList;
		_freeList = obj;
	}
private:
	char* _memory = nullptr;//一個char一個字節(jié),往后方便切出內(nèi)存塊,指向大塊內(nèi)存的指針
	void* _freeList = nullptr;//還回來過程中的鏈接的自由鏈表指針
	size_t _RemainBytes = 0;//大塊內(nèi)存在切分的過程中剩余的字節(jié)數(shù)
};

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


當(dāng)前題目:【C++項(xiàng)目】定長內(nèi)存池-創(chuàng)新互聯(lián)
轉(zhuǎn)載注明:http://weahome.cn/article/dscocj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部