개요
- 리소스가 소멸될 때만 할당된 메모리를 해제하는 특수 목적 메모리 리소스 클래스
- 빠른 메모리 할당 가능
- 쓰레드 세이프 하지 않음
예제
- 코드
#include <algorithm>
#include <chrono>
#include <iostream>
#include <list>
#include <memory_resource>
using namespace std;
int main() {
auto declare_std = [](const int &size) {
list<int> l;
for (int i = 0; i < size; ++i) {
l.push_back(i);
}
};
auto declare_pmr = [](const int &size) {
pmr::list<int> l;
for (int i = 0; i < size; ++i) {
l.push_back(i);
}
};
auto declare_pmr_no_buffer = [](const int &size) {
pmr::monotonic_buffer_resource mbr;
pmr::polymorphic_allocator<int> pa{&mbr};
pmr::list<int> l{pa};
for (int i = 0; i < size; ++i) {
l.push_back(i);
}
};
auto declare_pmr_buffer = [](const int &size) {
// array<byte, numeric_limits<int>::max() / 200000> buffer;
array<byte, 1024 * 1024> buffer;
pmr::monotonic_buffer_resource mbr{buffer.data(), buffer.size()};
pmr::polymorphic_allocator<int> pa{&mbr};
pmr::list<int> l{pa};
for (int i = 0; i < size; ++i) {
l.push_back(i);
}
};
auto run = [](auto func, const int &size) {
chrono::system_clock::time_point start = chrono::system_clock::now();
func(size);
chrono::duration<double> sec = chrono::system_clock::now() - start;
cout << sec.count() << endl;
return sec;
};
const int size = 1000000;
run(declare_std, size);
run(declare_pmr, size);
run(declare_pmr_no_buffer, size);
run(declare_pmr_buffer, size);
return 0;
}
- 실행 결과
0.15664
0.164578
0.132461
0.130183