해결된 질문
23.10.26 02:40 작성
·
410
·
수정됨
0
당장은 돈이 딸려 넓고얕게 공부하는 컴퓨터구조 강의를 구입하지는 못 한 학생입니다. 챗gpt를 이용해서 모르는 부분을 채워나가고 있었으나, 그래도 제대로 이해가 안 되는 부분을 채워가고싶어 질문 드립니다.
일단 제가 알고 있는 전제부터 깔고 가겠습니다.
1.모든 메모리 공간은 하나당 1바이트의 크기를 가지고있는걸로 알고 있습니다. 그리고 해당하는 1바이트의 메모리 공간마다 주소를 갖고있는 걸로 알고있습니다.
2. 64비트 아키텍쳐 cpu는 주로 8바이트 단위로 메모리 주소를 처리하는 걸로 알고 있습니다. 그러나 1바이트 단위로도 메모리를 처리할 수 있는 걸로 알고 있습니다.
질문 내용-
1. 일단 위에 알고있는 내용이 사실인지 궁금합니다.
2. 변수로 지정할 수 있는 메모리 최소 크기가 1바이트인 이유가 위와같은 이유 때문인가요? 그리고 최대크기도 8바이트인걸로 아는데 위와같은 이유때문인가요?
3. 머신코드 == 어셈블리어 인가요? 아니면 머신코드는 원래 이진수 코드만을 의미하는건데 이제는 어셈블리어를 사람들이 쓰지 않으니깐 머신코드라고 통합해서 지칭하는건가요?
영상을 다시 봐도 이해가 잘 안가네요.
답변 1
1
2023. 10. 26. 10:58
네, 맞습니다. 다만 같은 말을 다르게 표현하자면...'1바이트 단위 메모리 마다 주소를 부여'한다고
64비트 시스템은 1바이트 메모리에 부여하는 주소가 64비트 상수인 것입니다. 8바이트 단위로 메모리를 잘라서 관리한다는 것은 맞지 않습니다. 아마도 구조체 멤버 정렬 등 메모리 패킹과 관련한 내용과 혼동한 것으로 보입니다.
[질문에 대한 답변]
1. 반만 맞다고 할 수 있겠습니다.
2. 비트 필드를 이용한다면 1바이트를 다시 잘라 멤버로 지정 할 수 있습니다. 그리고 최대 크기도 8바이트라고 알고 있는 것도 바르지 않습니다. 부동소수점 형식인 long double 형식은 컴파일러에 따라 크기가 달라지며 64비트를 넘어 갈 수 있습니다. (컴파일러마다 다름)
3. 머신코든 보통 2진수로 표기하는 것이 일반적입니다. 그러나 알아보기가 쉽지 않아 여기에 니모닉을 붙여 표기한 것이 어셈블리어 입니다. 보통 이 일을 디스어셈블러가 해줍니다. 본인 짐작처럼 사람들이 둘을 구별해 설명하지 않는 경우가 많긴 합니다.
참고하시기 바랍니다. :)
2023. 10. 26. 14:50
감사합니다. 속이 뻥 뚫리는 기분입니다