stack 영역과 heap영역 질문입니다.
조회수 435회
heap영역과 stack영역에 대해서 궁금한점이 있습니다.
int main(void) { int p2 =(int)malloc(sizeof(char) * 10); // 40바이트 할당됨.
printf("%d\n",&p2); // p2주소를 100이라고 가정합니다.
int *p3 = p2 +11; // 4바이트 할당됨.
printf("%d\n",&p3); // p3의 주소가 111번지가 나옵니다.
return 0; }
p2는malloc에 의해 할당되어서 heap영역에 할당되고 p3는 stack에 할당이 된다고 배운것같습니다.
그렇다면 &p2와 &p3, 즉 각각의 주소가 인접한 영역이 아니여야 할텐데 visual studio에서 디버깅해보니 주소가 인접한 영역으로 나타납니다.
heap 영역과 stack 영역의 구분을 visual studio에서 어떻게 확인하는지 궁금합니다.
관련된 자료가 있을까요?
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
이 부분은 pe file이 pe loader 에 의해서 로딩되는 구조를 공부해야 합니다.
리버스 엔지니어링 서적이나 pe file 분석 서적이면 원하시는 내용을 학습 할 수 있습니다.
간략하게 이야기 드리면...
exe 파일이 로드될 때 가상 메모리 공간(x86 기준 4기가)을 할당 받고 pe file 의 섹션 정보를 참고하여 코드, 데이터, 리소스 등등을 메모리에 배치합니다.
원하시는 스택으로 사용되는 메모리 공간은 0~64k 보호구간(Access violation reading location 0x0000000c 이런 메세지를 보셨을텐데 보호구간에 접근해서 발생해서 나타나는 오류입니다.) 다음부터 시작합니다.
댓글 입력