해결된 질문
작성
·
990
0
32비트 구조에서
스택프레임은 메모리주소가 낮은주소로 쌓이고
0번지를 향해 증가하는데 ? 이유가 무엇인가요 ?
네이버 검색상으로는 스택프레임이 커널영역을 침범하지 않게하기위해서 라고 하는데, 그글 댓글에서 커널영역을 침범하지 않기위해서라는 설명은 틀린설명이라고 하는데 정확한 이유가 궁금합니다.
추가로 64비트 컴퓨터는 왜 32비트 구조랑 스택프레임구조가 왜 다른지궁금합니다.
그냥 설계된것은 아닌거같아서요
답변 1
0
이는 마치 우리가 Hello world를 왜 첫 예제로 배우는 것인가? 라는 질문과 비슷하지 싶습니다. 아주 오래전 과거 컴퓨터 들(RAM이 512KB 8088 XT 같은...)은 주기억장치 용량이 매우 작았습니다. 그 시절 DOS 같은 운영체제는 Kernel과 User mode가 구별되지도 않았습니다. 아마도 이 때문에 틀린 설명이라는 지적이 있었을 것 같습니다.
그리고 메모리 주소 범위 중 0번지 부터 일정 범위는 OS자체 작동(및 주변기기 통신을 위한 I/O 주소영역)을 위해 사용했습니다. 그래서 운영체제의 영역으로 보통 설명됩니다. 아우러 스택은 최대 크기가 정해진 메모리라는 점과 단 1바이트라도 아끼기 위한 노력의 결과 + 엔디안 방식 문제 등을 고려해 그리 정해진 것이 아닌가 추정해봅니다. 아무튼 커널 영역침범을 막는 다는 의미는 잘못된 것이라 하겠습니다.
마지막으로 32비트나 64비트나 스택프레임 구조는 같습니다. 다만 메모리 주소 상수 크기가 달라지겠습니다. 그리고 그에 따른 얼라인먼트 차이가 있기는 하겠습니다. 참고하시기 바랍니다. 감사합니다.