os

    함수 호출의 리턴 주소는 어떻게 스택에 저장될까?

    리턴 주소는 어떻게 스택에 저장될까?C/C++을 포함한 대부분의 언어에서 함수 호출은 단순히 점프(jump)하는 것이 아니라, 나중에 돌아올 위치를 기억해야 하기 때문에 "리턴 주소(return address)"라는 개념이 사용됩니다. 이 리턴 주소는 스택(stack)에 저장되며, 함수가 끝나면 이 주소로 제어가 돌아옵니다.이번 글에서는 리턴 주소가 스택에 어떻게 저장되고 다시 복원되는지, 그 과정을 함수 호출 단계별로 자세히 정리해보겠습니다.1. 함수 호출 시: call 명령어의 역할C++ 함수가 호출되면, 컴파일된 어셈블리 코드에서는 보통 다음과 같은 명령어가 사용됩니다:call 함수_주소이 call 명령은 다음 두 가지 일을 동시에 합니다:리턴 주소를 스택에 push 한다→ 즉, 현재 명령어의 다음..

    변수들이 메모리에 저장되는 영역

    변수들이 메모리에 저장되는 영역에 대해서프로그램이 실행될 때 변수와 코드들은 운영체제로부터 할당받은 메모리 공간에 저장되며, 이 메모리는 용도에 따라 여러 영역으로 나뉩니다. 대표적으로 다음과 같은 영역들이 있습니다:1. Text (Code) 영역컴파일된 기계어 명령어가 저장되는 영역입니다.함수의 실제 동작 코드들이 이곳에 위치하며, 일반적으로 읽기 전용입니다.프로그램이 실행되는 동안 항상 메모리에 상주합니다.2. rodata (Read-Only Data) 영역읽기 전용 상수 데이터가 저장되는 구역입니다.예를 들어 문자열 리터럴("Hello")이나 const로 선언된 전역 상수 등이 여기에 저장됩니다.수정이 불가능하며, 수정 시 런타임 오류(segmentation fault)가 발생할 수 있습니다.3. ..