2013-10-23 4 views
0

이 질문을 검색했지만 찾을 수 없습니다.함수 및 프로그램 명령 메모리

1) 함수 선언 및 정의 자체가 스택에 저장되어 있습니까? 변수가 무엇인지 알고 있지만 함수 자체는 무엇입니까?

2) 프로그램 명령어/텍스트 영역이 프로세스의 메모리 세그먼트에서 참조하는 것은 무엇입니까? 예?

답변

2

아니요. 스택은 함수 호출 순서와 컨텍스트를 저장하고 함수에서 호출하고 반환 할 때 사용합니다. 여기에는 이러한 함수의 로컬 변수도 포함됩니다. 스택은 메모리의 (바람직하게는 실행 불가능한) 읽기 - 쓰기 데이터 섹션에있다.

전체 프로그램의 코드 자체는 읽기 전용 실행 메모리에있는 .text 섹션에 있습니다 (일반적으로).

Linux를 사용하는 경우 readelf 유틸리티를 확인하십시오.이 유틸리티는 메모리에로드 할 때 ELF 실행 파일을 배치하는 방법을 알려줍니다.

Windows PE Explorer의 경우 이전 버전이지만 무료가 아니며 64 비트 (PE32 Plus) 실행 파일을 지원하지 않지만 비슷한 기능을 수행합니다.

+0

.text 프로그램 명령어/텍스트 영역과 같은 영역? 어떤 것이 프로세스 메모리의 맨 아래에 있습니까? – Newbie

+0

예, 프로그램의 코드 (바이너리 시스템 명령어). 여러분이 묻는 것은 구현에 따라 다릅니다. 컴파일 된 실행 파일을 확인하여 일반적으로 어떻게 배치되어 있는지 확인하십시오. –

+0

고맙습니다. 내가 필요한 것을 얻었습니다. – Newbie

1

함수 선언 및 정의는 쉼표 또는 대괄호 쌍과 같은 구문 구조입니다. 소스 코드에만 존재하며 어디에도 저장되지 않습니다.

함수는 런타임에 존재하고 주소가있는 함수입니다. thst 주소가 어디에 지정되지 않습니다. C에 관한 한, fumctions와 data는 완전히 다른 address 공간에 속한다. 그들의 주소는 섞일 수 없다. 따라서 스택에 있는지 여부를 묻는 질문조차 할 수 없습니다. 질문은 잘못 정의되어 있습니다.

C에는 프로그램 명령이나 세그먼트 또는 프로세스에 대한 개념이 없으므로 C의 컨텍스트에서 이들에 대해 이야기하는 것은 의미가 없습니다. 아키텍트와 OS에 관해 이야기 할 수 있으려면 아키텍트와 OS를 지정해야합니다.

+0

'-g'로 컴파일하지 않는 한 :-) –

관련 문제