주소 바인딩에 관한 질문입니다.
글쓴이: corenc / 작성시간: 수, 2004/11/17 - 1:23오전
주소 바인딩 시간에 관한 질문입니다.
시점에 따라 분류하면 컴파일시간, 적재시간, 실행시간 입니다.
배열을 선언하는데 int num[9]; 이런 식으로 하고
동적 할당을 쓰면 int *num=(int*)malloc(sizeof(int)*10); 이런 식으로 하는데요
여기서 배열로 선언한것이 컴파일 시간에 바인딩 한것이고
malloc을 써서 선언한것이 실행시간에 바인딩 되는것이 아닌가 싶습니다.
이게 맞나요? ??
실행파일로 만들어 놓으면 논리주소만 가지고 있다가
실제 메모리주소가 바인딩 되는 시간은?
Forums:
C에서 배열 선언은 컴파일 타임에 배열 크기가 완전하게 알려진다는 것을
C에서 배열 선언은 컴파일 타임에 배열 크기가 완전하게 알려진다는 것을 전제하기에, 선언 위치에 따라, 전역 변수라면 data나 bss 영역에, 지역변수라면 스택에 얼마의 크기로 만들어질 것이라는 것을 분명하게 알 수 있습니다. data, bss, text, stack, heap 등에 대해서는 다음 그림을 참조.
스택은 함수 호출(프로그램 루틴)을 위한 임시 공간이어서 호출이 끝나면 사라지는 공간이고, C 언어에서는 함수 내에서 선언된 지역변수는 auto로 간주해서 함수가 종료하면 자동으로 소멸되는 특징이 있습니다.
참고로 스택의 특성과 C 언어의 auto 한정자 사이에는 일정한 관계가 있습니다. 물론 OS 아키텍쳐쪽의 용어(프로세스, 스택, 힙 등)와 프로그래밍 언어쪽의 용어(함수, 전역변수, 지역변수, auto 등)는 분리해서 사용하는 것이 바람직합니다만, C 언어가 현대의 지배적인 아키텍쳐를 주된 고려사항으로 해서 설계된 언어임을 생각한다면, 언어와 아키텍쳐 사이의 추상적인 개념을 서로 이어보는 것이 이러한 아키텍쳐 위에서 프로그래밍하는 사람에게 많은 도움이 됩니다.
malloc은 소위 '힙(heap)'이라고 부르는, 프로세스가 실행 중인 동안에 운영체제에 요구하여 할당받고, 메모리 공간을 할당받은 프로세스가 명시적으로 해제해야 할 의무가 있는 공간을 확보할 수 있게 해줍니다.
----
http://nohmad.tumblr.com/
댓글 달기