stl 메모리풀 질문입니다

프로그래밍 일반에 관한 포럼입니다.

Moderator: 류광

Locked
비회원

stl 메모리풀 질문입니다

Post by 비회원 »

메모리 풀 질문입니다
메모리 풀이라면 메모리 영역을 일정크기로 미리 할당을 한후 필요할때마다 거기서 꺼내쓰고 필요없으면 다시 저장하고 ....로 알고 있습니다
근데 간혹 사이트들을 보면 아래와같은 메모리풀이 있습니다
(viewtopic.php?t=4295&highlight=%BA%CE%C7%CF 사이트 참조)
그렇다면 아래의 코드는 stl 의 메모리풀에서 내부적으로 메모리 풀의 역활을 해주는건가요?
해준다면 미리 어느정도의 크기를.... 할당해놓은가요?? (한글이 헷갈리네요 ㅠㅠ )


Code: Select all

#include "stdafx.h"
#include <stdio.h>
#include <xmemory>
using std::allocator;


class test
{
public:		
	test(void){}
	~test(void){}

	int a;

	static void *operator new(size_t size) 
	{
		return pool.allocate(size);
	}
	static void operator delete(void *p, size_t size) 
	{
		pool.deallocate((test *)p, size);
	}
	static void *operator new[](size_t size) 
	{
		return pool.allocate(size);
	}
	static void operator delete[](void *p, size_t size) 
	{
		pool.deallocate((test *)p, size);
	}
	static allocator<test> pool;
};

allocator<test> test::pool;


int _tmain(int argc, _TCHAR* argv[])
{
	test *p;
	p = new test;
	delete p;

	p = new test[10];
	delete [] p;

	return 0;
}
비회원

한가지만 더 질문 드리겠습니다..

Post by 비회원 »

질문자인데 한가지만 더 질문 드리겠습니다

stl 컨테이너를 보면 기본 생성자에
allocator 가 기본적으로 할당되게 되어있습니다

이 allocator 의 역활이 혹시 이런역활도 하나요
list, stack, queue, vector 에 데이타를 넣을때마다 내부적으로 new 로 하나의 노드를 생성하여 데이타가 들어가는 것으로 알고 있습니다
이런식으로 데이타를 10개 넣으면 10번의 new 가 생성된다고 했을때 데이타를 2개 빼고 3개를 다시 넣는다면

2개뺄때 delete 처리가 되는게 아니라 allocator 에서 할당되었던 메모리를 가지고 있고 3개를 넣을때 이미 2개의 공간은 있으므로 new 처리되지 않고 1개의 공간만 new 처리되는건가요??

질문을 제대로 했는지 모르겠네요..

(요새 메모리풀에 관심이 생겨서 이것저것 찾아보고 있는데..어느부분은 쉬운데 어느부분은 어렵게 느껴지네요..)
mastercho
Posts: 587
Joined: 2004-05-09 20:37

Post by mastercho »

STL 마다 다르지만 MS STL은 저 할당자가 하는 일이 new delete와 같고요

STLport는 list의 경우인가? 아마 노드계열 STL경우, 자체 메모리풀 기능을 가진 할당자를 쓴다고 알고 있습니

STL마다 구현이 다를수 있으므로 해당 STL쪽 구현에 대해 알아보시는게 나을겁니다
Locked