游戏服务器之自定义内存池管理器和空间配置器

设计上:

(1)内存分配器管理器(nMemoryAlloc):

内存分配器管理器含有针对不同内存大小的内存池数组。每个内存池对象含有空闲节点链表,管理分配和回收的节点对象内存。

(2)链表节点内存:

链表节点对象含有变长内存成员,适合分配各个长度的内存对象。但同一个内存池对象中的节点内存大小是一致的。

(3)内存分配原则:

1)内存分配器nMemoryAlloc对于内存大小在1~1024 * 1024 字节之间小对象使用内存池的管理,否则就使用系统默认的分配和删除接口,让系统管理内存。

2)内存分配器适用的是定长的类型。

(4)静态存储区使用:

内存池管理器中的内存池数组是静态的,对外提供静态接口。

(5)空间配置器:

空间配置器使用内存池管理器来管理器内存



1、内存池类型

内存池分配节点,没有内存就向系统申请,否则从空闲列表中获取。

内存池含空闲节点链表。

 

class MemPool2
{
private:
	struct _Node
	{
		_Node():next(NULL)
		{
		}
		~_Node()
		{
		}
	_Node* next;
	unsigned char data[0];//变长内存
	};
	
	_Node* mFreeNodeList;
	public: 
	unsigned long _all_alloc_size;//总共分配内存大小计数
	unsigned long _all_alloc_num;//分配节点计数
	unsigned long _all_use_num;//使用节点计数
	unsigned long _all_free_num;//空闲节点计数
	public: 
	
	MemPool2()
	: mFreeNodeList(NULL),_all_alloc_size(0),_all_alloc_num(0),_all_use_num(0),_all_free_num(0)
	{
	}
	
	void reset()//释放链表所有节点内存
	{
		_Node* p = mFreeNodeList;
		while(p)
		{
			_all_free_num ++;
			_Node* _p = p;
			p = p->next;
			char *tmp = (char *)_p;
			free(tmp);
		}
		mFreeNodeList = NULL;
	}
	~MemPool2(void)
	{
		_Node* p = mFreeNodeList;
		while(p)
		{
			_Node* _p = p;
			p = p->next;
			char *tmp = (char *)_p;
			free(tmp);
		}
		mFreeNodeList = NULL;
	}
	
	_Node* __allocData(int datasize)//实际分配节点(没有内存就向系统申请,否则从空闲列表中获取)
	{
		if(!mFreeNodeList)
		{
			_all_alloc_size += (sizeof(_Node) + datasize);//记录总分配大小
			_all_alloc_num ++;//记录分配节点数
			char *tmp = (char *)malloc(sizeof(_Node) + datasize);
			mFreeNodeList = (_Node *)tmp;
			constructInPlace(mFreeNodeList);
		}
		_all_use_num ++;
		_Node* p = mFreeNodeList;
		mFreeNodeList = mFreeNodeList->next;
		return p;//返回节点
	}
	
	unsigned char* alloc0(int datasize)//分配节点(没有内存就向系统申请,否则从空闲列表中获取)
	{
		_Node* p = __allocData(datasize);
		return (unsigned char*)(p->data);
	}
	
	void freePtr(unsigned char* &p)//回收节点的内存回链表表头
	{
		if (p)
		{
			_Node* pNod = (_Node*)(p - sizeof(_Node));//上一个链表节点(分配过的就会有)
			pNod->next = mFreeNodeList;
			mFreeNodeList = pNod;
			p = NULL;
			_all_use_num
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: VirtualBox是一种开源的虚拟机软件,可以在计算机上创建和运行多个虚拟操作系统。VirtualBox提供了一个Web界面管理工具,可以方便地管理和监控虚拟机。虚拟机管理器使用Web界面管理可以提供更加灵活和方便的操作。 通过VirtualBox的Web界面管理工具,用户可以通过浏览访问和管理虚拟机。这个工具提供了各种功能,包括创建、克隆、删除和配置虚拟机等。用户可以通过简单的点击和拖动来完成这些任务,而无需使用命令行或其他复杂的操作。 虚拟机管理器的Web界面还提供了实时的监控和统计信息。用户可以查看虚拟机的使用情况,包括CPU、内存和磁盘的利用率。同时,还可以监控网络连接和传输速度等信息。这些信息可以帮助用户了解虚拟机的性能和资源利用情况,及时作出调整和优化。 VirtualBox的Web界面管理工具还支持远程管理。用户可以通过网络远程登录管理服务器,无需直接连接到服务器所在的物理机。这种方式可以对服务器进行远程维护和监控,提高了管理的灵活性和效率。 总之,VirtualBox的Web界面管理工具为用户提供了方便的虚拟机管理和监控功能。通过简单的操作,用户可以轻松地创建、配置和删除虚拟机,并实时监控虚拟机的使用情况和性能。远程管理功能还提供了更灵活的管理方式,方便用户进行远程维护和监控虚拟机。 ### 回答2: VirtualBox 是一款功能强大的虚拟机软件,它允许用户在一台主机上运行多个虚拟操作系统。虚拟机可以像真正的计算机一样运行,拥有独立的操作系统、应用程序和硬件资源。为了更方便地管理虚拟机和其相关设置,VirtualBox 提供了 Web 管理界面。 VirtualBox 的 Web 管理界面可以通过网络访问,并具有易于使用的图形化用户界面。它允许用户远程管理与控制虚拟机,无需物理接触到主机。通过 Web 管理界面,用户可以对虚拟机进行各种操作,包括创建、克隆、运行、暂停、重启和关闭虚拟机。 此外,Web 管理界面还提供了丰富的配置选项,例如网络设置、共享文件夹、硬件虚拟化等。用户可以根据自己的需求,自定义虚拟机的配置和性能参数。 通过 VirtualBox 的 Web 管理界面,用户可以更加方便地管理虚拟机和其相关设置。同时,它还提供了更好的可视化和操作性,使用户能够轻松地完成各种复杂任务,提高了工作效率。 总结来说,VirtualBox 的 Web 管理界面是一种方便实用的工具,为用户提供了远程管理和操作虚拟机的便捷方式。它使用户能够更轻松地配置和控制虚拟机,并提供了丰富的选项和功能,满足不同用户的需求。 ### 回答3: VirtualBox是一种开源的虚拟化软件,它允许用户在单台物理计算机上运行多个操作系统。VirtualBox提供了一个方便的Web管理界面,可以通过浏览远程管理虚拟机和主机。 通过VirtualBox的Web管理界面,用户可以轻松地创建、配置和监控虚拟机。用户可以在Web界面中创建新的虚拟机,并选择操作系统类型、分配的内存和硬盘空间配置。用户还可以在Web界面中导入和导出虚拟机,方便地实现虚拟机的迁移和共享。 除了虚拟机的创建和配置,VirtualBox的Web管理界面还提供了详细的监控和管理功能。用户可以查看虚拟机的运行状态、CPU和内存使用情况,以及网络连接和存储使用情况。在Web界面中,用户可以远程控制虚拟机,并进行操作系统的安装、启动和关闭等操作。 另外,VirtualBox的Web管理界面还提供了一些高级功能,如虚拟机的快照管理和虚拟机的共享文件夹设置。用户可以在Web界面中创建和管理虚拟机的快照,方便地进行系统备份和恢复。同时,用户还可以在Web界面中设置共享文件夹,实现主机和虚拟机之间的文件共享和传输。 总的来说,VirtualBox的Web管理界面为用户提供了方便、高效的虚拟机管理工具。用户可以通过Web界面远程管理虚拟机和主机,实现虚拟机的创建、配置、监控和管理。通过VirtualBox的Web管理界面,用户可以轻松地构建和管理多个虚拟机,提高工作效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值