작성
·
269
3
안녕하세요.
선생님께서 강의 후반부에서 실제로 stack에 쌓이는 것은 변수 뿐만 아니라 함수를 실행하기 위해 필요한 데이터들도 있다고 말씀하셨습니다.
이때 int 자료형 크기 이상(4 byte)의 차이를 보인다고 말씀하셨는데, 이 차이는 각 주소 값들을 비교한 것인가요?
그게 맞다면 제 출력값 기준으로 각 주소값들은 256의(10진수 기준) 차이를 보이던데, 이것은 1byte정도의 크기가 아닌가요?
늘 친절한 답변 감사합니다.
답변 1
2
안녕하세요, 답변 도우미 Soobak 입니다.
네, 강의에서의 코드 printf(Level %d, address of variable n = %d\n", n, (int)& n);
으로 출력되는 주소 값들에 대하여 말씀하신 것입니다.
컴퓨터 메모리의 주소는 일반적으로 한 바이트를 참조하고 가리킵니다.
따라서, 주소가 256
만큼 차이가 나는 경우, 그 사이에는 256
바이트 공간이 있다는 것을 의미합니다.
추가적으로 부연 설명을 드려보면, 함수를 호출 할 때마다 함수의 매개변수, 반환 주소, 지역 변수, 함수에서 생성된 임시 데이터 등등이 스택 이라는 메모리 공간에 쌓이게 됩니다.
메모리 공간에 대해서는 강의 12.1 메모리 레이아웃 훑어보기 에서 보다 자세히 학습하시게 되며, 질문해주신 내용과 관련해서는 Stack frame
의 키워드로 검색을 해보셔도 좋을 것 같습니다.
안녕하세요, 답변 도우미 Soobak 입니다.
이진수 표현과 메모리 주소 사이의 관계를 명확히 이해하시는 것이 도움이 될 것 같습니다.
이진수 1111 1111
은 십진수로 255
를 나타냅니다.
이는 한 바이트의 최대값이기도 합니다.
그런, 메모리 주소의 차이를 계산할 때는 이러한 이진수의 값이 아니라, 실제 바이트 단위의 차이를 고려해야 합니다.
간단히 예를 들어, 메모리 주소가 100
과 356
사이에 있다고 할 때, 이 두 주소 사이의 차이는 256
이며, 이는 실제로 메모리 상에서 256
바이트 만큼의 공간이 있다는 것을 의미합니다.
이진수 표현과는 별개로, 각 메모리 주소는 실제 바이트 단위로 차이가 납니다.
따라서, 주소가 256
만큼 차이가 난다면, 이는 메모리 상에서 실제로 256
바이트의 공간이 존재한다는 것을 의미하며, 이진수 표현과는 직접적인 관계가 없습니다.
안녕하세요. 아래에 말씀해주신 게 이해가 잘 안 돼 하나 여쭤볼려고 하는데요
256만큼 차이가 나는 경우에는 이진수로 1111 1111 정도 되니까 2바이트 만큼 공간이 있어야 하는 거 아닌가요?
감사합니다