프로그래밍 초보가 질문하는 스택과 힙
글쓴이: jinkelly / 작성시간: 화, 2012/03/20 - 10:40오전
운영체제를 공부하면서 프로세스 내 메모리 구조를 보니
메모리 주소가 stack은 high에서 low로 heap은 low에서 high로 각각 감소나 증가하는 것으로 이해하였습니다.
그러나 실제로 이것을 실험?하고자 간단하게 프로그래밍 해보앗으나 둘다 증가하였습니다.
제가 무엇을 잘못 이해 하였는지 잘 모르겠습니다.
사진을 참고하여 주시기 바랍니다^^
========================================================================
#include <stdio.h> #include <stdlib.h> #define N 10 int main() { int stack_num[N]={0}; int* heap_num=(int*)malloc(sizeof(int)*N); int i=0; printf("스택 : "); for(i=0; i<N; i++) { printf("%p\t", &stack_num[i]); } //주소값이 점점 감소 printf("\n"); printf("힙 : "); for(i=0; i<N; i++) { printf("%p\t", (heap_num+i)); } //주소값이 점점 증가 return 0; }
========================================================================
File attachments:
첨부 | 파일 크기 |
---|---|
![]() | 107.12 KB |
Forums:
heap_num의 주소도 출력해보세요
(&heap_num < stack_num)은 true일것입니다.
none
네 위 첨부된 dd.jpg사진을 보시면 스택이 힙보다 주소가 높긴한데 왜 스택영역에 채워질 배열의 주소가 증가되는줄 모르겠습니다 별거 아니지만 ...운영체제를 공부하다 보니 ..그냥 궁금합니다^^
스택의 증가와 힙의 증가의 방향이 그렇다는
스택의 증가와 힙의 증가의 방향이 그렇다는 것입니다.
메모리의 인덱싱의 방향은 변하지 않습니다.
단순히 질문하신 원글에서 보면 메모리의 주소를 가르키는 low, high라는 의미가 힙과 스택에서 바뀌지 않았잖아요.
내 블로그: http://unipro.tistory.com
스택이 high에서 low로 자란다는 건... 지역
스택이 high에서 low로 자란다는 건... 지역 변수 배열 하나를 선언했을때 그 배열의 0번 원소의 주소가 더 높고 1번 원소의 주소가 더 낮다는 뜻은 아니거든요. 원소 10개짜리 배열이면 그 크기만큼의 덩어리를 스택에 할당하고 0번 원소는 그 중 제일 낮은 주소에 할당됩니다. (뭐 안 그런 아키텍처도 있을런지는 모르겠습니다만)
힙도 마찬가지로, 이 경우 공교롭게도 증가하는 걸로 나왔습니다만 heap_num+i 에서 +대신에 -를 쓰면 점점 줄어드는 값을 보셨을 겁니다.
바로 위 리플에 적는 걸 깜박했는데 (로그인을 안
바로 위 리플에 적는 걸 깜박했는데 (로그인을 안 했더만 수정이 안 되네요)
스택이 아래로 자란다는 걸 확인하려면 저렇게 한 함수 내에서 선언한 지역 변수들의 주소값을 보고 판단하는 것도 사실 충분치 못하지 싶고...
제일 정확한 건 함수를 연쇄적으로 호출해보시는 게 낫겠습니다.
a() -> b() -> c()
순으로 호출할 때 세 함수의 로컬 변수의 주소가 어떻게 되는지 말이죠.
댓글 달기