서버/메모리 관리

5. STL Allocator

광란의슈가슈가룬 2024. 8. 16. 05:15

일반적인 클래스나 자료형은 지금까지 했던 Allocator를 이용하여 메모리를 할당하고 해제할 수 있었다. 메모리 오염 또한 방지할 수 있었는데 벡터나 맵 등 다른 자료구조에 대해서는 아직 내부적으로 new, delete를 사용하고 있을 것이다. 이번에는 이를 한 번 수정해보자.

벡터

벡터 클래스의 선언부를 보면 타입과 Allocator를 지정할 수 있다.

vector<int32, StlAllocator<int32>> v;

이런식으로 사용할 수 있다는 뜻이다!!!

 

하지만 매번 위와 같이 지정할 수는 없으므로 헤더파일을 하나 만들어보자.

 

Container.h

#pragma once
#include "Types.h"
#include "Allocator.h"
#include <vector>
#include <list>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <unordered_map>
#include <unordered_set>
using namespace std;

template<typename Type>
using Vector = vector<Type, StlAllocator<Type>>;

template<typename Type>
using List = list<Type, StlAllocator<Type>>;

template<typename Key, typename Type, typename Pred = less<Key>>
using Map = map<Key, Type, Pred, StlAllocator<pair<const Key, Type>>>;

template<typename Key, typename Pred = less<Key>>
using Set = set<Key, Pred, StlAllocator<Key>>;

template<typename Type>
using Deque = deque<Type, StlAllocator<Type>>;

template<typename Type, typename Container = Deque<Type>>
using Queue = queue<Type, Container>;

template<typename Type, typename Container = Deque<Type>>
using Stack = stack<Type, Container>;

template<typename Type, typename Container = Vector<Type>, typename Pred = less<typename Container::value_type>>
using PriorityQueue = priority_queue<Type, Container, Pred>;

using String = basic_string<char, char_traits<char>, StlAllocator<char>>;
using WString = basic_string<wchar_t, char_traits<wchar_t>, StlAllocator<wchar_t>>;

template<typename Key, typename Type, typename Hasher = hash<Key>, typename KeyEq = equal_to<Key>>
using HashMap = unordered_map<Key, Type, Hasher, KeyEq, StlAllocator<pair<const Key, Type>>>;

template<typename Key, typename Hasher = hash<Key>, typename KeyEq = equal_to<Key>>
using HashSet = unordered_set<Key, Hasher, KeyEq, StlAllocator<Key>>;

자주 사용하는 자료구조들을 using 키워드를 통해 재정의했다. 이제 직접 설정한 키워드로 해당 자료구조를 사용할 수 있다. 만약 더 필요한 것들이 있다면 그 자료구조의 포멧에 맞춰 추가하면 된다.

'서버 > 메모리 관리' 카테고리의 다른 글

7. Memory Pool #2  (0) 2024.08.23
6. Memory Pool #1  (0) 2024.08.20
4. Stomp Allocator  (0) 2024.08.16
3. Allocator  (0) 2024.08.11
2. 스마트포인터  (0) 2024.08.11