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

한울님의 프로필 이미지
한울

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

TextRPG #2

패딩 관련...

해결된 질문

작성

·

187

0

루키스님 안녕하세요
 
1. 다름이 아니라, 패딩 관련 설명을 듣고
이것저것 실험하던 중,
 
struct ObjectInfo2 { short type; char defence; int hp; __int64 attack; };
로 ObjectInfo2라는 새로운 구조체 타입을 만들고
ObjectInfo2 playerInfo2;를 한 뒤
디버깅 상태에서 sizeof(playerInfo2)를 조사식에 입력하였는데
예상대로라면 __int64의 크기 * 4 = 32byte가 나올 줄 알았는데
오히려 12byte라고 출력되었습니다...
왜 이런 결과가 나온 것인가요?
 
2. 32bit 체제와 64bit 체제는
메모리나 레지스터 체계에서 4바이트냐 8바이트냐 정도의 차이가 있다고 들었는데
실제 코딩할 때는 어떤 방식으로 영향을 주고, 또 실수가 난다면 어떤 식으로 나게 되나요?
 
3. &playerInfo를 하니 주소값이 나왔는데
멤버 변수들의 값이 해당 주소값보다 높은 주소들에 위치하고 있었습니다...전역변수들은 원래 이렇게 되는 것인가요?
 
 
 

답변 1

0

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

1. 
그럴 것 같지 않고 16이 나와야 정상입니다.
2148인데 8을 기준으로 정렬해서 [21.4][8]로
한칸 비우게 됩니다.

2.
요즘은 다 64비트로 하니 신경쓸 필요 없습니다.
굳이 예전으로 따지자면 32비트에서 int64를 사용하면
atomic하지 않아 멀티쓰레드에서 문제가 일어날 수 있었습니다.

3.
세세한 주소 값은 신경쓸 필요가 없습니다.

궁금한게 많을 수록, 구글신과 친해져야 합니다.
구글링을 해보면 거의 필요한 정보를 다 얻을 수 있습니다.

한울님의 프로필 이미지
한울
질문자

1. 앗 지금 다시 살펴봤더니 멤버 type들을 다른 것으로 다시 바꿔놓은 상태였네요..

원래대로 복구하고 테스트하니 16이 나왔습니다 감사합니다!

그럼 패딩은 구조체 멤버 type들 중에서 가장 큰 type의 크기를 기준으로 삼되,

다른 멤버들 type 크기의 합이 해당 type 크기보다 작다면 정렬 내에 여러 멤버들이 뭉쳐있는 것인가요?

그럼 {char , int, int, __int64}라면 [1 4][4][8]이 되는 것인가요?

 

2. stack memory

int main 함수 내에서

int a = 3;

int b = 5;

int result = MultiplyBy2(5,3);

MultiplyBy2(int a, int b)

{

int c = a * b;

return c;

}

을 어셈블리어로 살펴봤는데

지역변수 a,b,c를 스택 메모리에 넣겠다고 선언하는 부분에서는

mov dword ptr .... 이라 되어있는 반면

매개변수 a,b를 스택 메모리에 넣겠다고 선언하는 부분에서는

mov 이후 push...라 되어있는데

둘의 차이가 무엇이기에 어셈블리어 형식이 다른 것인지 궁금합니다...

3. stackoverflow 같은 곳에서 궁금한 점을 검색할 때 원하는 내용과 최대한 비슷한 결과물들을 얻기 위해 검색어를 잘 작성하는 팁이 있을까요? 

지나치게 간략화해서 검색하면 원하는 내용과 어느 정도 동떨어진 결과물들이 많이 나오고

지나치게 디테일하게 검색하면 거의 안 나올 때도 있어서...

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

1. 내용이 좀 오묘한데 구글/네이버 검색을 통해 연구해보시기 바랍니다.
2. 스택 프레임을 더 깊이 연구해보시기 바랍니다. 둘 다 스택에 위치한 데이터라 사실 큰 차이가 없고 컴파일러가 작성하는 코드는 절대적인게 아닙니다. 거꾸로 왜 그렇게 차이가 나는지 스스로 유추해보시기 바랍니다.
3. 구글링도 하다 보면 늡니다. stackoverflow까지 갈 필요도 없고, 네이버나 구글 메인 페이지에서 키워드 검색하면 정말 90%의 질문은 스스로 해결이 가능하고 또 그렇게 습관을 들여야 합니다. 어차피 현업에 가면 모르는건 똑같은데 자력으로 연구해서 답을 찾아나가야 하기 때문입니다.

한울님의 프로필 이미지
한울
질문자

감사합니다!

한울님의 프로필 이미지
한울

작성한 질문수

질문하기