인프런 커뮤니티 질문&답변

snu님의 프로필 이미지
snu

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

메모리풀 #1 강의 질문입니다.

작성

·

153

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
 
메모리 헤더 구조체의
static void* AttachHeader(MemoryHeader* header, int32 size) 함수에서
[MemoryHeader][Data] 와 같은 구조라고 하셨는데
32바이트를 할당받은 메모리 풀일 경우
[<----32바이트----->]
[MemoryHeader][Data]
인 구조가 맞나요?
 
또한 MemoryHeader만큼 +1하여 [MemoryHeader]->[Data]
Data를 가르킨채로 해당 영역을 리턴하면 컴파일러가 알아서 해당 메모리에 저장하고 사용하는 건가요?
Data 영역을 리턴한 이후로 작업은 별도로 수행하지 않아서 문의 드립니다.
 
 

답변 1

1

Rookiss님의 프로필 이미지
Rookiss
지식공유자

1)

[<----32바이트----->]
[MemoryHeader][ Data ]
 
입니다.

2)
 
Data를 가르킨채로 해당 영역을 리턴하면 컴파일러가 알아서 해당 메모리에 저장하고 사용하는 건가요?
 
질문이 잘 이해가 안 가지만 일단 [컴파일러가~]에서 무조건 아닙니다. ㅎㅎ
컴파일러가 '알아서' 해당 메모리에 저장할 수는 없고
우리가 의도한 Data 시작 주소로 계산해서 반환하기 때문에 가능한 것이죠.
Data 주소만 일단 구해주고 추후 placement new 문법을 이용해 거기에 데이터를 사용하게 됩니다.
snu님의 프로필 이미지
snu
질문자

제가 질문해놓고도 이상하네요ㅠ OS가 해주는게 맞겠죠

template<typename T>

class StlAllocator의

T* allocate(size_t count) 함수에서

return static_cast<T*>(xalloc(size))을 리턴해주면 ->[Data]가 가르키는 공간만큼을 OS에서 할당해 주는것이 맞나요(new의 메모리 할당기능)?

보통 c++에서 new /delete만을 사용하여 new 하면 메모리 할당해주는구나~알기만 했지

그 함수를 직접 눈으로 보니 헷갈리네요

snu님의 프로필 이미지
snu

작성한 질문수

질문하기