⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 memorypool.cpp

📁 用于仿真系统中多个仿真对象间的内存管理
💻 CPP
字号:
// MemoryPool.cpp: implementation of the MemoryPool class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "MemoryPool.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

MemoryPool::MemoryPool(long datasize,long datablksize,long msgsize, int msgblksize)
{
	pool_size = datasize + msgsize;
	msg_size = msgsize;
	data_size = datasize;	
	msg_blksize = msgblksize;
	data_blksize = datablksize;

	data_head = static_cast<float*>(malloc(pool_size*sizeof(float)));
	message_head = data_head + data_size;

	for(int i= 0;i<data_size/data_blksize;i++)
	{
		freedata_list.push(data_head+i*data_blksize);
	}
	for(i=0;i<msg_size/msgblksize;i++)
	{
		freemsg_list.push(message_head+i*msg_blksize);
	}
	
	cout << "the MemoryPool is:" << endl;
	cout <<"data_head is :" << data_head <<'\t' << "message_head is:" << message_head <<endl;
	cout << endl;
	cout << "Memory block info:" << endl;
	
	

}

MemoryPool::~MemoryPool()
{
	free(data_head);
}

float* MemoryPool::GetDataBlk()
{
	if(freedata_list.empty())
		return 0;
	float* datablk = freedata_list.front();
	usedata_list.push(datablk);
	freedata_list.pop();
	return datablk;
}

void MemoryPool::ReturnDataBlk(float *data)
{
	usedata_list.pop();
	freedata_list.push(data);
}

float* MemoryPool::GetMsgBlk()
{
	if(freemsg_list.empty())
		return 0;
	float* msgblk = freemsg_list.front();
	usemsg_list.push(msgblk);
	freemsg_list.pop();
	return msgblk;
}

void MemoryPool::ReturnMsgBlk(float *msg)
{
	usemsg_list.pop();
	freemsg_list.push(msg);
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -