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에서 어떻게 확인하는지 궁금합니다.

관련된 자료가 있을까요?

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 확인하는 코드가 잘못되어 있고요. 힙과 스택 주소를 확인하려면, 디버그모드로 실행해서, 변수의 값과 주소를 확인하면서 이런저런 실험을 해 보세요. nowp 2019.7.24 14:48

1 답변

  • 이 부분은 pe file이 pe loader 에 의해서 로딩되는 구조를 공부해야 합니다.

    리버스 엔지니어링 서적이나 pe file 분석 서적이면 원하시는 내용을 학습 할 수 있습니다.

    간략하게 이야기 드리면...

    exe 파일이 로드될 때 가상 메모리 공간(x86 기준 4기가)을 할당 받고 pe file 의 섹션 정보를 참고하여 코드, 데이터, 리소스 등등을 메모리에 배치합니다.

    원하시는 스택으로 사용되는 메모리 공간은 0~64k 보호구간(Access violation reading location 0x0000000c 이런 메세지를 보셨을텐데 보호구간에 접근해서 발생해서 나타나는 오류입니다.) 다음부터 시작합니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)