메모리 풀 할당 사이즈 관련
596
작성한 질문수 35
MemoryPool* pool = new MemoryPool(size)
부분에서 할당 메모리 크기인 size가 각 for문 마다 고정되어야 한다고 생각했습니다.
그런데 강의 코드에서는 아래와 같이 size가 for loop를 한번 돌 때 마다 늘어나더라고요.
Memory::Memory()
{
int32 size = 0;
int32 tableIndex = 0;
for (size = 32; size <= 1024; size += 32)
{
MemoryPool* pool = new MemoryPool(size);
_pools.push_back(pool);
while (tableIndex <= size)
{
_poolTable[tableIndex] = pool;
tableIndex++;
}
}
for (; size <= 2048; size += 128)
{
MemoryPool* pool = new MemoryPool(size);
_pools.push_back(pool);
while (tableIndex <= size)
{
_poolTable[tableIndex] = pool;
tableIndex++;
}
}
for (; size <= 4096; size += 256)
{
MemoryPool* pool = new MemoryPool(size);
_pools.push_back(pool);
while (tableIndex <= size)
{
_poolTable[tableIndex] = pool;
tableIndex++;
}
}
}
제가 강의를 듣고 생각한건
0~1024 byte까지는 32 byte단위,
~2048 byte까지 128 btye단위,
~4096 byte까지 256 byte단위로 할당 한다고 생각했거든요.
근데 위 코드에서 첫번째 for문을 예를 들면 처음에는
Memory Pool을 32 byte 사이즈로 할당하는데
그다음에는 64 byte, 그다음은 96 byte ... 로 할당 사이즈가 점진적으로 증가하더라고요.
저는 1024 byte까지는 32byte로 쭉 하다가,
1024 byte부터 128 byte 단위로 할당할것이라고 생각했습니다.
그래서 저는 아래와 같은 식으로 되어야 하지 않을까 생각했습니다.
Memory::Memory()
{
int32 size = 0;
int32 tableIndex = 0;
for (size = 32; size <= 1024; size += 32)
{
MemoryPool* pool = new MemoryPool(32);
_pools.push_back(pool);
while (tableIndex <= size)
{
_poolTable[tableIndex] = pool;
tableIndex++;
}
}
for (; size <= 2048; size += 128)
{
MemoryPool* pool = new MemoryPool(128);
_pools.push_back(pool);
while (tableIndex <= size)
{
_poolTable[tableIndex] = pool;
tableIndex++;
}
}
for (; size <= 4096; size += 256)
{
MemoryPool* pool = new MemoryPool(256);
_pools.push_back(pool);
while (tableIndex <= size)
{
_poolTable[tableIndex] = pool;
tableIndex++;
}
}
}
제가 이해하지 못한 부분이 어떤것인지 알고 싶습니다.
답변 1
2
https://www.inflearn.com/questions/357795
Memory Pool을 32 byte 사이즈로 할당하는데
그다음에는 64 byte, 그다음은 96 byte ... 로 할당 사이즈가 점진적으로 증가하더라고요.
네 그게 의도한게 맞습니다.
방으로 비유하면 32인실 방을 여러개를 준비하는게 아니라,
32인실, 64인실, 96인실... 이렇게 점차 크기를 늘려가는겁니다.
15명이 방문한다면 32인실로 넣어주고,
70명이 방문한다면 96인실로 배치시켜주면 되겠죠.
추가로 MemoryPool은 내부적으로 할당받은 크기의 메모리를 여러개를 할당합니다.
32byte 크기의 MemoryPool을 만들면,
딱 1개의 32byte 크기만 받을 수 있는게 아니라
내부적으로 32byte 크기의 chunk를 여러개 할당하는 것이죠.
writeLock을 잡을때 꼭 empty 상태여야하는 이유?
0
63
2
Memory Pool에서 오버플로우 질문입니다.
0
94
2
포토폴리오 및 진로 관련하여 고민입니다.
0
169
1
포토폴리오 관련 고민입니다.
0
91
1
실무에서도 alloc, 스마트포인터 등을 구현해서 쓰는지 궁금합니다.
0
107
2
성능 테스트 결과
0
117
2
게임 서버 Stateful, Stateless 진로 고민
0
147
1
WaitOnAddress와 Sleep의 차이 질문
0
98
1
궁금한거 있습니다.
0
92
2
JobTimer 구동 스레드
0
116
2
TryPop() 동작 관련 질문
0
86
1
로드맵 C#서버 C++서버 방향성 질문
0
162
2
스레드 id를 출력할떄 메인스레드 id도 출력되나요?
0
81
1
생명주기를 위한 의도적 복사
0
94
2
락프리의 실무에서 사용 질문
0
154
2
32bit threadID와 16비트 상위 WriteFlag에 대해
0
109
2
mutex와 sleep 차이점
0
133
1
실무에서는 어떠한 코드 스타일을 사용하는지 궁금합니다
0
167
2
Stomp Allocator의 Release함수에 대한 질문입니다.
0
102
1
공부법 관련해서
0
190
2
MakeShared 함수 관련
0
119
1
지금까지 서버코어에서 만든 내용에 대해 궁금한 점이 있어서 질문 드립니다.
0
152
2
운영체제관련 질문입니다
0
144
1
send하려는 데이터 크기가 크면 memcpy에서 문제가 발생할 것 같습니다.
0
125
2





