해결된 질문
작성
·
187
0
답변 1
0
1.
그럴 것 같지 않고 16이 나와야 정상입니다.
2148인데 8을 기준으로 정렬해서 [21.4][8]로
한칸 비우게 됩니다.
2.
요즘은 다 64비트로 하니 신경쓸 필요 없습니다.
굳이 예전으로 따지자면 32비트에서 int64를 사용하면
atomic하지 않아 멀티쓰레드에서 문제가 일어날 수 있었습니다.
3.
세세한 주소 값은 신경쓸 필요가 없습니다.
궁금한게 많을 수록, 구글신과 친해져야 합니다.
구글링을 해보면 거의 필요한 정보를 다 얻을 수 있습니다.
1. 내용이 좀 오묘한데 구글/네이버 검색을 통해 연구해보시기 바랍니다.
2. 스택 프레임을 더 깊이 연구해보시기 바랍니다. 둘 다 스택에 위치한 데이터라 사실 큰 차이가 없고 컴파일러가 작성하는 코드는 절대적인게 아닙니다. 거꾸로 왜 그렇게 차이가 나는지 스스로 유추해보시기 바랍니다.
3. 구글링도 하다 보면 늡니다. stackoverflow까지 갈 필요도 없고, 네이버나 구글 메인 페이지에서 키워드 검색하면 정말 90%의 질문은 스스로 해결이 가능하고 또 그렇게 습관을 들여야 합니다. 어차피 현업에 가면 모르는건 똑같은데 자력으로 연구해서 답을 찾아나가야 하기 때문입니다.
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 같은 곳에서 궁금한 점을 검색할 때 원하는 내용과 최대한 비슷한 결과물들을 얻기 위해 검색어를 잘 작성하는 팁이 있을까요?
지나치게 간략화해서 검색하면 원하는 내용과 어느 정도 동떨어진 결과물들이 많이 나오고
지나치게 디테일하게 검색하면 거의 안 나올 때도 있어서...