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

snu님의 프로필 이미지
snu

작성한 질문수

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

Stomp Allocator

VirtualFree 함수 질문입니다.

작성

·

348

1

Release 함수에서 baseAddress를 구할때
[ <------offset-----------> [ 할당영역 ]]
0 -------------------------↑address 4095
만약 page가 1개만 할당되었을 경우 offset을 구하려면
위와 같이 0~4096 주소 범위라면 address 값 자체가 3000이면
address%page_size =3000 이고
address -3000=0 으로
baseAdress를 구하는 것은 이해가 되는데
막상 데이터를 보면 address는 8바이트의 임의의 숫자입니다.
0~4095,4096~8191 과 같이 주소값 자체가 PageSize로 나타나는 것이 아닌데 address%page_size 가 offset을 나타내는게 가능한가요? baseAddress부터는 4096씩 할당 받는다해도 이전의 주소가 임의의 값 아닌가요?

답변 2

1

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

 
막상 데이터를 보면 address는 8바이트의 임의의 숫자입니다.
-> 음 질문이 잘 이해가 안 가는데 혹시 어느 부분이 임의 숫자인가요?

[ <------offset-----------> [ 할당영역 ]]
0 -------------------------↑address 4095
 
여기서 0에 해당하는 시작 주소가 0x1000 배수로 할당되고,
할당 크기에 따라 offset 만큼 띄워주니
address는 랜덤이 아닙니다.

0x1000 align이 되지 않는다면
헤더값을 넣어서 할당 위치를 표기한다거나
뭐 다양한 방법으로 우회하면 됩니다.

0

snu님의 프로필 이미지
snu
질문자

여기서 0에 해당하는 시작 주소가 0x1000 배수로 할당되고

-> 이 부분을 몰랐었네요....그냥 0에 해당하는 시작주소가 운영체제가 할당해주는 가상메모리의 임의의 주소인줄 알았는데 페이지 사이즈의 배수로 할당해주는군요

페이지 사이즈의 배수가 아닌경우도 있나요?

 

 

snu님의 프로필 이미지
snu

작성한 질문수

질문하기