[완료] static 함수가 프로그램 이미지 상에서는 어디에 위치하나요??
글쓴이: plustag / 작성시간: 수, 2007/11/07 - 12:10오전
보통 프로그램이 메모리에 로드되면
코드, 데이터, 스택, 힙 으로 나뉘고
함수는 호출될 때 활성화 레코드로 스택에 push되는데
함수를 static으로 선언해도 동일하게 스택에 들어가는지 아니면 다른 곳에 위치하는지 알고 싶습니다.
static함수는 내부에서만 참조가 가능한데..(뭐 함수 포인터로 어떻게 하면 참조가 가능하긴 하지만)
이런거는 컴파일러가 처리하는 것인지 프로세스내에서 처리하는 것인지도 알고 싶습니다..
Forums:
코드는 이미지상
코드는 이미지상 .text에 들어갑니다.
함수 콜시 스택에 들어가는 것은 아규먼트와 리턴 어드레스입니다.
함수 코드 (기계어)가 아닙니다.
함수의 코드가
함수의 코드가 스택에 들어가는게 아닌건 알고 있는데
static으로 선언하게 되면
해당 함수가 호출될 때 활성화 레코드가 다른 함수처럼 스택에 들어가는지
아니면 다른 영역에 있는지가 궁금합니다.
스택에 들어간다면 내부적인 참조만 가능하도록 동작하게 하는 것은
컴파일러가 관리하는 것인지 아니면 다른 부분이 담당하는지 알고 싶습니다.
누구냐 넌?
"함수는 호출될 때
"함수는 호출될 때 활성화 레코드로 스택에 push되는데" 라는 말이 이해가 안되는군요..
"활성화 레코드"라는 용어도 처음들어보고요..
프로세스가 실행이 되면 loader가 코드 부분은 메모리에 복사를 합니다.
이때 그냥 복사하는게 아니라 컴파일러가 지정한 메모리 영역에 매핑되도록 복사를 하게되고..
컴퓨터는 ip를 이용해 다음 명령어를 패치하고 실행하게 됩니다.
이때 함수가 실행이 되어야한다면 일련의 프롤로그과정을 거치고 call 명령을 이용해서
함수를 호출하거나 특수한 경우에는 jmp명령을 이용해서 함수를 호출하게 됩니다.
이때 프롤로그 과정에서 함수를 콜하기 전에 레지스터를 스택에 백업하게 되고, 인자가 필요하는
경우에는 인자를 스택에 푸시하는 경우가 선행 된후 함수를 콜하게 됩니다.
스택에 푸시하는 경우는 이와같이 레지스터와 함수가 사용할 인자의 경우밖에 없는데 "활성화 레코드"
라는 말이 뭔지 궁금하네요..
"static함수는 내부에서만 참조가 가능한데..(뭐 함수 포인터로 어떻게 하면 참조가 가능하긴 하지만)
이런거는 컴파일러가 처리하는 것인지 프로세스내에서 처리하는 것인지도 알고 싶습니다.."
-> 스태틱 함수는 언어상의 문법 구분일 따름입니다. 스태틱 함수의 경우에는 해당 파일 스코프에서만 사용이 가능
하도록 문법에 정의 되어있을 뿐 다른 제약사항은 없습니다. 즉 컴파일러가 처리한다고 생각하시면 됩니다.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
인용:static함수는
object 파일 생성시 static 함수는 export 되는 symbol table 에 포함되지 않습니다.
따라서 link 시 해당 static 함수가 포함된 object 파일 외의 파일에서는 참조할 수 없게 됩니다.
chadr님, 라키시스님
chadr님, 라키시스님 답변 감사합니다.
활성화 레코드(activation recode)는 unix system programming 책에 나온 말입니다.
책에서는 리턴주소, 매개변수, 자동변수, 레지스터 값을 활성화 레코드라고 부릅니다.
그러니까 하나의 함수에 대한 리턴값, 인자값, 변수값 같은 것들이 하나의 활성화 레코드라고 하는것 같습니다.
언어하고 하드웨어에 따라 형식이 달라질 수 있다네요..
누구냐 넌?
그렇다면 제가
그렇다면 제가 설명해드린데로 활성화 레코드는 스태틱 함수도 다른 함수와 다를게 없이 똑같이 스택에 푸시가 됩니다.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.
댓글 달기