现在的位置: 首页 > 综合 > 正文

ACE 中 ACE_Allocator 使用例子

2019年01月10日 ⁄ 综合 ⁄ 共 1245字 ⁄ 字号 评论关闭

ACE_Cached_Allocator
该分配器预先分配内存池,其中含有特定数目和大小的内存chunk。这些chunk在内部空闲表(free list)中进行维护,并在收到内存请求(malloc())时被返回。当应用调用free()时,chunk被归还到内部空闲表、而不是OS中。

 

// Memapply.cpp : Defines the entry point for the console application.

#include "stdafx.h"
#include "ace/Containers.h"
#include "ace/Malloc_T.h"
#include "ace/Synch.h" 

class book
{
	book(int code, char* name)
	{
		code_ = code;
		strcpy_s(name_, 20, name);
	}
	virtual ~book();
private:
	int  code_;
	char name_[20];
public:
	void setbook(int code, char* name)
	{
		code_ = code;
		strcpy_s(name_, 20, name);
	}
	void output()
	{
		printf("code=%d name=%s\n", code_, name_);
	}
};


int ACE_TMAIN(int argc, ACE_TCHAR* agrv[])
{
	
	ACE_Allocator *allocator = 0;

	size_t block_size = sizeof(ACE_Node<book>);
	ACE_NEW_RETURN(allocator,  ACE_Dynamic_Cached_Allocator<ACE_Null_Mutex>(10, block_size), -1);

	book* pbook[20];
	for(int i = 0; i < 20; i++)
	{
		pbook[i] = NULL;
	}

	for(int i = 0; i < 20; i++)
	{
		pbook[i] = (book*)allocator->malloc(sizeof(ACE_Node<book>));
		if (pbook[i] != 0)
		{
			char bookname[50];
			sprintf_s(bookname, 50,"wangxu_%02d", i);
			pbook[i]->setbook(i, bookname);
			pbook[i]->output();
		}
		else
		{	
			printf("%d apply for memeory error\n", i);
		}
	}
 
	printf("free 1 block\n");
	allocator->free(pbook[0]);

	printf("apply for again\n");
	pbook[0] = (book*)allocator->malloc(sizeof(ACE_Node<book>));
	pbook[0]->setbook(99, "zhangsan");
	pbook[0]->output();

	delete allocator;

	getchar();
	return 0;
}

 

抱歉!评论已关闭.