Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

39 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

MemoryPool

very simple memory pool
c++ / Windows xp~ / Visual Studio 2015~

Layer : VMEM <-> MemoryUnitsGroup_List <-> UnitsGroup (per cpu core) <-> Thread Local Storage

uses internally winapi virtulalloc functions to handle the memory

flexible object pool
unique object pool
https://github.com/lastpenguin/MemoryPool/blob/master/Project_C/SourceCode/Core/UTIL/ObjectPool.h

Performance Test1(is not repeated)

performance test(1 thread) My Memory Pool vs LFH vs TBB malloc test(min 128 max 512)1024 T1 N

performance test(8 thread) My Memory Pool vs LFH vs TBB malloc test(min 128 max 512)1024 T8 N

Better performance when used repeatedly

Performance Test2(ARM cpu + windows10)

test program path :
https://github.com/lastpenguin/MemoryPool/tree/master/Project_C/SourceCode/x64/Release
test code :
https://github.com/lastpenguin/MemoryPool/blob/master/Project_C/SourceCode/TEST/ConsoleTestProject/test_memorypool.h

atom x5-z8350, 4core, 4GB ram
test loop : 20
object size : 32 ~ 512
random seed : 0
mem size per test : 512MB
write / read test : no

thread 1:
pool 47.5925 sec
lfh 69.9947 sec
tbb 50.1776 sec

thread 4:
pool 21.3557 sec
lfh 31.0175 sec
tbb 21.7671 sec

๊ตฌ์กฐ

๋ฉ”๋ชจ๋ฆฌํ’€ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ V2
๋ฉ”๋ชจ๋ฆฌํ’€ ๋ฉ”๋ชจ๋ฆฌ ํ๋ฆ„ V2

ํ”„๋กœ์ ํŠธ ์šฐ์„ ์ˆœ์œ„

  1. ์Šค๋ ˆ๋“œ ์„ธ์ดํ”„
  2. ๋ฉ”๋ชจ๋ฆฌ ๋…ผ๋ฆฌ์  ์ฃผ์†Œ, ๋ฌผ๋ฆฌ์  ๊ณต๊ฐ„์˜ ๋‹จํŽธํ™” ๋ฐฉ์ง€
  3. ๋ถ€๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋ชจ๋น„์šฉ์˜ ์ตœ์†Œํ™”
  4. ์†๋„
  5. ๋ฒ”์šฉ์„ฑ์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋Š” ๊ฐ€๋Šฅํ•œ ํ•ด์ œ๋ฅผ ์‹œ๋„

์‚ฌ์šฉ ์š”๊ตฌ์‚ฌํ•ญ

  • Visual Studio 2015 C++
  • ์‚ฌ์šฉ์ž์˜ C++ ๊ธฐ์ดˆ์ง€์‹

์‹คํ–‰ ์š”๊ตฌ์‚ฌํ•ญ

๊ตฌ์„ฑ

  • Core_x86.dll Windows XP ์ด์ƒ
  • Core_x64.dll Windows Vista ์ด์ƒ
  • โ€ป ๋ฌธ์ž ์ง‘ํ•ฉ : ์œ ๋‹ˆ์ฝ”๋“œ

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์—ฐ๊ฒฐ

๋ฐฉ๋ฒ•1

Project_C/Library Public Version/Core Library BETA 2.0 ์„ ์‚ฌ์šฉ

์ดˆ๊ธฐํ™”๋ฅผ ์ฒ˜๋ฆฌํ•  cpp ํŒŒ์ผ์—์„œ ๋‹ค์Œ ํŒŒ์ผ์„ ํฌํ•จ(include)

./User/Core_import.h

์ดˆ๊ธฐํ™”

::CORE::Connect_CORE(...)

์ข…๋ฃŒ(๋ช…์‹œ์  ์ข…๋ฃŒ ์‹œ์ ์ด ํ•„์š”ํ• ๋•Œ๋งŒ ์‚ฌ์šฉ)

::CORE::Disconnect_CORE

์‚ฌ์šฉ์„ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ ํŒŒ์ผ์„ ํฌํ•จ(include)

./User/Core_include.h

๋ฐฉ๋ฒ•2

Project_C/SourceCode/Engine ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ import ๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ 


์ธํ„ฐํŽ˜์ด์Šค

์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‹ค์Œ ํŒŒ์ผ๋“ค์„ ์ฐธ๊ณ 

  • Core_Interface.h
  • MemoryPool_Interface.h
  • System_Information_Interface.h

๋””๋ฒ„๊น…์šฉ ๋กœ๊ทธ ํ•„์š”์‹œ ๋‹ค์Œ ํŒŒ์ผ์„ ์ฐธ๊ณ ํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ •์˜ํ•˜์—ฌ, ์ดˆ๊ธฐํ™”์‹œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•จ

  • LogWriter_Interface.h
  • pLogSystem: ์ค‘์š”ํ•œ ์˜ค๋ฅ˜๋“ฑ์„ ๊ธฐ๋ก
  • pLogDebug: ์ผ๋ฐ˜ ๋””๋ฒ„๊น… ์ •๋ณด

์ฝ”๋“œ๋‚ด ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

(๋‹ค์Œ์˜ ๋ฐฉ๋ฒ•๋“ค์€ ๋ชจ๋‘ ํ˜ผ์šฉ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค)

#1) ์ด๋ฏธ ์ž‘์„ฑ๋œ ์ฝ”๋“œ์— ์‰ฝ๊ฒŒ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
๋ฉ”๋ชจ๋ฆฌํ’€์„ ์ ์šฉํ•˜๋ ค๋Š” ๊ฐ์ฒด๋Š” CMemoryPoolResource๋ฅผ ์ƒ์†๋ฐ›์Šต๋‹ˆ๋‹ค.
โ€ป ์ฃผ์˜ : ์ž์‹ ํด๋ž˜์Šค๊นŒ์ง€ ๋ชจ๋‘ ๋ฉ”๋ชจ๋ฆฌํ’€์˜ ์˜ํ–ฅ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.

์˜ˆ:)
class CTest1 : public CMemoryPoolResource {
...
};

CTest1* p = new CTest1(...);
delete p;
์˜ˆ:) 
struct TTest1 : CMemoryPoolResource {
...
};

TTest1* p = new TTest1;
delete p;
class CParent : public CMemoryPoolResource {
public:
 virtual ~CParent();
...
};
class CChild : public CParent {
...
};

//CParent::__Get_MemoryPool<sizeof(CParent)>()->mFN_Hint_MaxMemorySize_Add(sizeof(CParent)*1000);
//CChild::__Get_MemoryPool<CChild>()->mFN_Hint_MaxMemorySize_Set(sizeof(CChild)*500);

CParent* p = new CChild(...);
delete p;

new delete ๋ฅผ ์ด์šฉํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

#2) ๊ฐ์ฒด๋‹จ์œ„์— ๋Œ€ํ•˜์—ฌ ๋งŒ์•ฝ ์ƒ์†์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ํŠน์ •์ƒํ™ฉ์—๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ์˜ ๋งคํฌ๋กœ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
CMemoryPoolResource๋ฅผ ์ƒ์† ๋ฐ›์€ ํƒ€์ž…๋˜ํ•œ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

// โ–  ๋งคํฌ๋กœ ๋ฒ„์ „ : ํ• ๋‹น์ž / ์†Œ๋ฉธ์ž ๋น„ ํ˜ธ์ถœ 
_MACRO_ALLOC__FROM_MEMORYPOOL(Address) 
_MACRO_FREE__FROM_MEMORYPOOL(Address) 

// โ–  ๋งคํฌ๋กœ ๋ฒ„์ „ : ํ• ๋‹น์ž / ์†Œ๋ฉธ์ž ํ˜ธ์ถœ 
_MACRO_NEW__FROM_MEMORYPOOL(Address, Constructor) 
_MACRO_DELETE__FROM_MEMORYPOOL(Address) 
์˜ˆ:)
TTest1* p1 = nullptr;
_MACRO_ALLOC__FROM_MEMORYPOOL(p1);
_MACRO_FREE__FROM_MEMORYPOOL(p2);

TTest1* p2 = nullptr;
_MACRO_NEW__FROM_MEMORYPOOL(p1, TTest1(...));
_MACRO_DELETE__FROM_MEMORYPOOL(p1);

#3) ๊ฐ€๋ณ€ํฌ๊ธฐ ์‚ฌ์šฉ
๋งŒ์•ฝ ํ• ๋‹นํ•˜๋ ค๋Š” ํฌ๊ธฐ๊ฐ€ ๊ฐ€๋ณ€์ (์˜ˆ๋ฅผ ๋“ค์–ด ๋ฌธ์ž์—ด ๋ฒ„ํผ) ์ด๋ผ๋ฉด ๋ฉ”๋ชจ๋ฆฌํ’€๊ด€๋ฆฌ์ž์— ์ง์ ‘ ์ ‘๊ทผํ•˜์—ฌ ๋‹ค์Œ์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

IMemoryPool_Manager::mFN_Get_Memory 
IMemoryPool_Manager::mFN_Return_Memory 
IMemoryPool_Manager::mFN_Get_Memory__AlignedCacheSize       // ์บ์‹œ๋ผ์ธ ์ •๋ ฌ ๋ฒ„์ „ 
IMemoryPool_Manager::mFN_Return_Memory__AlignedCacheSize    // ์บ์‹œ๋ผ์ธ ์ •๋ ฌ ๋ฒ„์ „ 

// โ–  ๋งคํฌ๋กœ ๋ฒ„์ „ : ํ• ๋‹น์ž / ์†Œ๋ฉธ์ž ๋น„ ํ˜ธ์ถœ 
// โ€ป malloc / free ๋ฅผ ๋Œ€์‹ ํ•˜๊ธฐ์— ์ ํ•ฉํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. 
_MACRO_ALLOC__FROM_MEMORYPOOL_GENERIC 
_MACRO_FREE__FROM_MEMORYPOOL_GENERIC
์˜ˆ:)
TTest1* p1 = _MACRO_ALLOC__FROM_MEMORYPOOL_GENERIC(sizeof(TTest1));
...
_MACRO_FREE__FROM_MEMORYPOOL_GENERIC(p1);

#๊ธฐํƒ€1 : STL Container Allocator STL Container ์˜ Allocator ๊ต์ฒด ํ•  ๊ฒฝ์šฐ ๋‹ค์Œ์„ ์‚ฌ์šฉ

TAllocator 

์ด๊ฒƒ์€ vector ๊ฐ™์€ ๋งค์šฐ ๊ฐ€๋ณ€์  ํฌ๊ธฐ ํ• ๋‹น์— ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค

#๊ธฐํƒ€2 :
๋งŒ์•ฝ ์บ์‹œ๋ผ์ธ ํฌ๊ธฐ์ธ 64B๋‹จ์œ„๋กœ ์ •๋ ฌ๋œ ์ฃผ์†Œ๋ฅผ ์–ป๊ณ  ์‹ถ๋‹ค๋ฉด
๋‹จ์ˆœํ•˜๊ฒŒ๋Š” 64B์˜ ๋ฐฐ์ˆ˜๋‹จ์œ„๋กœ ์š”๊ตฌ๋ฅผ ํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค

๊ณ ๊ธ‰ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

ํŒŒ์ผ MemoryPool_Interface.h์˜ ์‚ฌ์šฉ ์„ค๋ช…์„ ์ฐธ๊ณ  ํ•˜์‹ญ์‹œ์˜ค

Memory Pool Interface
::UTIL::MEM::IMemoryPool

Memory Pool Manager Interface
::UTIL::MEM::IMemoryPool_Manager

Instance
::UTIL::g_pMem

์‚ฌ์šฉ์ž์˜ ์ˆ˜์š”์˜ˆ์ธก ์ตœ์ ํ™” ์˜ˆ

๋‹ค์Œ์˜ ์ตœ์ ํ™”๋Š” ๋ฉ”๋ชจ๋ฆฌํ’€์˜ ๋ฐ˜์‘์‹œ๊ฐ„์„ ๋Œ€ํญ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
(ํ• ๋‹น/ํ•ด์ œ๊ฐ€ ์—ฌ๋Ÿฌ๋ฒˆ ๋ฐ˜๋ณต๋˜๋Š” ๊ฒฝ์šฐ virtualalloc virtualfree ํ˜ธ์ถœ ์–ต์ œ)

#1) ํ”„๋กœ๊ทธ๋žจ ์ดˆ๊ธฐ๊ณผ์ •
์ด์ „ ์‹คํ–‰์—์„œ์˜ ๊ฐ์ฒด๋ณ„ ์ตœ๋Œ€ ์‚ฌ์šฉํฌ๊ธฐ ํ™•์ธ

#2) ๊ฐ์ฒด๋ณ„ ์ตœ๋Œ€์‚ฌ์šฉ ํฌ๊ธฐ๋ฅผ ๋ฉ”์†Œ๋“œ์— ์ „๋‹ฌ
IMemoryPool::mFN_Hint_MaxMemorySize_Set๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ
(โ€ป ํ˜„์žฌ ๋ถ€์ •ํ™•ํ•˜๊ฒŒ ๋™์ž‘ํ•จ)

#3) ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ์‹œ
ํ†ต๊ณ„์—์„œ ๋ฉ”๋ชจ๋ฆฌํ’€ ์ตœ๋Œ€ํฌ๊ธฐ ์กฐ์‚ฌ, ์ €์žฅ
IMemoryPool::mFN_Query_Stats
TMemoryPool_Stats::Base::nMaxSize_Pool


์ž‘์„ฑ์ž ์ฝ”๋ฉ˜ํŠธ

ํ˜น์‹œ๋‚˜ ๋ถ„์„์„ ์‹œ๋„ํ•˜๋ ค๋Š” ๋ถ„์„ ์œ„ํ•˜์—ฌ...

๋ฉ”๋ชจ๋ฆฌํ’€ ์ฝ”๋“œ๋Š” ํ”„๋กœ์ ํŠธCore์˜ ํด๋” UTIL ๋‚ด์— ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ์ค‘์—, V2 ํด๋”์— ์žˆ๋Š” ๊ฒƒ์ด ์ตœ๊ทผ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค(2015๋…„๊นŒ์ง€ ์ž‘์—…) ํŒŒ์ผ๋‹น ๋ผ์ธ์ˆ˜๋Š” ๋ถ„ํ• ์„ ํ•˜์ง€ ์•Š์•„ ์กฐ๊ธˆ ๋ถˆํŽธํ•˜๊ฒŒ ๋А๋‚„์ˆ˜๋„ ์žˆ์ง€๋งŒ ๊ฐ€๊ธ‰์  ๊ฐ์ฒด๋‹จ์œ„๋กœ namespace๋กœ ๊ฐ์‹ธ๋†“์•„ VS์˜ ์ˆจ๊ธฐ๊ธฐ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜๋ฉด ๋ณด๊ธฐ ๋ถˆํŽธํ•˜์ง€ ์•Š์„๊ฒ๋‹ˆ๋‹ค ์ด๋Ÿฐ์‹์œผ๋กœ์š”

namespace UTIL{
namespace MEM{
class OBJ1{
}
}
}

namespace UTIL{
namespace MEM{
class OBJ2{
}
}
}

์ด ๋ฉ”๋ชจ๋ฆฌํ’€ ๋‚ด๋ถ€์— ์‚ฌ์šฉ๋œ ๋ฝ์€ ๋ชฝ๋•… ์Šคํ•€๋ฝ์ž…๋‹ˆ๋‹ค (๋ฌผ๋ก  ์Šคํ•€ ํšŸ์ˆ˜์— ์ œํ•œ์„ ๋‘์–ด ์Šค๋ ˆ๋“œ์Šค์œ„์นญ์€ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค) (์ˆ˜์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ž ๊ธˆ์ด ์‚ฌ์šฉ๋œ ๋ถ€๋ถ„์€ ์‚ฌ์‹ค ๋งŽ์ง€ ์•Š์œผ๋‹ˆ ์‰ฝ๊ฒŒ ํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค)

์ด ๋ฉ”๋ชจ๋ฆฌํ’€์€ ๊ฒŒ์ž„๊ฐ™์€ ๊ณณ์— ์‚ฌ์šฉ์‹œ LFH, TBB์— ๋น„ํ•ด ์ข€๋” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ˆ์•ฝํ•ฉ๋‹ˆ๋‹ค (์•„๋งˆ๋„์š”, ๊ณ„์† ํ•ด์„œ LFH, TBB ์™€ ๋น„๊ตํ•ด์™”๊ฑฐ๋“ ์š”) LFH์— ๋น„ํ•ด ์ข€๋” ๋‹ค์–‘ํ•œ ํ’€๋กœ ๋ถ„ํ• ํ–ˆ์Šต๋‹ˆ๋‹ค ๊ธฐ๋ณธ ์ฒญํฌ ๋‹จ์œ„๋Š” 256KB์ด๋ฉฐ, ์ด๊ฒƒ์„ ๋‹ค์‹œ ๋ช‡ ๊ฐœ์˜ ๊ทธ๋ฃน์œผ๋กœ ๋ถ„ํ• ํ•˜์—ฌ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ ๊ฒฝ์Ÿ์„ ์ค„์ž…๋‹ˆ๋‹ค ์‹ค์ œ virtualalloc ์‹œ์—๋Š” 256KB * x ๋‹จ์œ„๋กœ ํ•œ๋ฒˆ์— ๋” ๋งŽ์ด ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค(์—ฌ๋Ÿฌ๊ฐœ์˜ ์ฒญํฌ๋ฅผ ํ•œ๋ฒˆ์— ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค) ๊ทธ๋ฆฌ๊ณ  ์ด ์ฒญํฌ๋“ค์€ ๊ฐ ๋‹จ์œ„์‚ฌ์ด์ฆˆ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ’€์—์„œ ํ•„์š”์‹œ ๋ถ„ํ• ํ•ด์„œ ๊ฐ€์ ธ๊ฐ€ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค ์—ฌ๊ธฐ์„œ ์™œ ์œˆ๋„์šฐ ๋ฉ”๋ชจ๋ฆฌ ์˜ˆ์•ฝ๋‹จ์œ„์ธ 64KB๊ฐ€ ์•„๋‹Œ 256KB ๋ƒ๊ณ  ๋ฌป๋Š”๋‹ค๋ฉด ์ˆœ์ „ํžˆ ๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ์„ ์œ„ํ•ด์„œ ์ž…๋‹ˆ๋‹ค ์—ฌ๊ธฐ์„œ 256KB ์ •๋ ฌ๋ฌธ์ œ๋กœ ์ข€ ๊ท€์ฐฎ์€ ์ฒ˜๋ฆฌ๋ฅผ ํ–ˆ๊ตฌ์š”

๋งŒ์•ฝ ์‚ฌ์šฉ์ž๊ฐ€ ์ž์‹ ์˜ ํ”„๋กœ์ ํŠธ์— ๋งž๊ฒŒ๋” ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ ์Šคํ”„๋ ˆ๋“œ์‹œํŠธ ํŒŒ์ผ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”

  • ๋ฉ”๋ชจ๋ฆฌํ’€ ํ• ๋‹นํฌ๊ธฐ ๊ณ„์‚ฐ.ods
  • ๋ฉ”๋ชจ๋ฆฌํ’€ ์˜ˆ์•ฝ๋‹จ์œ„ ๊ณ„์‚ฐ.ods

์ด ๋ฉ”๋ชจ๋ฆฌํ’€์€ 8๋…ผ๋ฆฌ์ฝ”์–ด ์ดํ•˜์— ์ตœ์ ํ™” ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค

(์‚ฌ์‹ค ํ˜ผ์ž ์“ฐ๋ ค ํ–ˆ๋Š”๋ฐ ๋ผ์ด์  ๋•Œ๋ฌธ์— ๋ฉ”์ธ์ŠคํŠธ๋ฆผ์ด 12, 16 ์Šค๋ ˆ๋“œ๋กœ ๋ฐ”๋€Œ์–ด์„œ ์˜คํ”ˆ์†Œ์Šคํ™” ํ•ฉ๋‹ˆ๋‹ค)

์ปดํŒŒ์ผ์‹œ ์˜ต์…˜

MemoryPool_v2/MemoryPoolCore_v2.h

// Release๋ฒ„์ „์—์„œ ํ…Œ์ŠคํŠธ ON //#define _DEF_USING_MEMORYPOOL_DEBUG 1 ์ฃผ์„ ํ•ด์ œ์‹œ ๋””๋ฒ„๊ทธ๋ชจ๋“œ๊ฐ€ ์•„๋‹ˆ์—ฌ๋„ ์ถœ๋ ฅ์ฐฝ์— ์ •๋ณดํ‘œ์‹œ

// ํ”„๋กœํŒŒ์ผ๋ง ON //#define _DEF_USING_MEMORYPOOL__PERFORMANCE_PROFILING 1 visual studio ์—์„œ ํ”„๋กœํŒŒ์ผ๋ง ๋„๊ตฌ ์‚ฌ์šฉ์‹œ, ๋ฉ”๋ชจ๋ฆฌํ’€ ํ•จ์ˆ˜/๋ฉ”์†Œ๋“œ ์ผ๋ถ€๋Š” ์ธ๋ผ์ธํ™”๋˜์–ด ์‚ฌ์šฉ์ž๋Š” ์ด๋Ÿฐ ๋ถ€๋ถ„๋“ค์˜ ํ”„๋กœํŒŒ์ผ๋ง ๊ฒฐ๊ณผ๋ฅผ ์„ธ๋ฐ€ํ•˜๊ฒŒ ๋ถ„์„ํ•˜๊ธฐ ํž˜๋“ค์–ด์ง€๊ธฐ๋•Œ๋ฌธ์— ํ•„์š”ํ•œ ๋ถ€๋ถ„์˜ ์ธ๋ผ์ธํ™”๋ฅผ ๋ง‰๋Š” ์˜ต์…˜

์งˆ๋ฌธ์€ lastpenguin83@gmail.com ์œผ๋กœ ํ•˜์‹œ๊ฑฐ๋‚˜ ์ด๊ณณ์— ํ•˜์‹ญ์‹œ์˜ค

2015๋…„ ์ดํ›„๋กœ ์ˆ˜์ •ํ•˜์ง€ ์•Š์•„ ๊ธฐ์–ต๋‚˜์ง€ ์•Š๋Š” ๋ถ€๋ถ„์ด ๋งŽ์Šต๋‹ˆ๋‹ค. ์ด ๋ถ€๋ถ„์ด ์™œ ์ด๋ ‡๊ฒŒ ํ–ˆ๋‚˜ ๊ถ๊ธˆํ•œ ๋ถ€๋ถ„์€ ๋‹ค์Œ์˜ ํŒŒ์ผ์„ ์ฐธ๊ณ  ํ•ด์ฃผ์„ธ์š”

  • ๋ฉ”๋ชจ๋ฆฌํ’€ ๊ฐœ์„ .txt (V1)
  • ๋ฉ”๋ชจ๋ฆฌํ’€ ๊ฐœ์„ V2.txt

About

simple memory pool / thread safe / minimized context switching / Memory managed in 4 levels / Requirements(Windows xp~ / Visualstudio 2015)

Topics

Resources

Stars

21 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages