본문 바로가기
공부/C++

C++ 함수에 대한 이해와 메모리 구조

by 떈구 2025. 3. 7.

1. 자료형별 함수 사용법

C++에서 함수는 다양한 자료형을 반환하고 인자로 받을 수 있음. 일반적으로 사용되는 함수의 형태를 살펴봄.

(1) 반환값이 없는 함수 (void)

void PrintMessage() {
    std::cout << "Hello, World!" << std::endl;
}

(2) 기본 자료형 반환 함수

int Add(int a, int b) {
    return a + b;
}

(3) 참조 반환 함수

int& GetValue(int& value) {
    return value;
}

(4) 포인터 반환 함수

int* AllocateMemory() {
    return new int(10);
}

 


2. 함수의 인자 사용법

C++ 함수에서는 다양한 방법으로 인자를 전달할 수 있음.

(1) 값 전달 (Call by Value)

void ModifyValue(int x) {
    x = 10; // 원본 값 변경되지 않음
}

(2) 참조 전달 (Call by Reference)

void ModifyReference(int& x) {
    x = 10; // 원본 값 변경됨
}
}

(3) 포인터 전달 (Call by Pointer)

void ModifyPointer(int* x) {
    if (x) {
        *x = 10; // 원본 값 변경됨
    }
}

(4) R-value 참조 (Move Semantics)

void ModifyRvalue(int&& x) {
    x = 10; // 일시적인 값 사용 가능
}

3. L-value와 R-value 개념

C++에서는 L-value와 R-value의 개념을 이해하는 것이 중요함.

(1) L-value (좌측값)

  • 메모리에 존재하며 식별할 수 있는 값
  • 변수처럼 수정 가능
int a = 5; // a는 L-value

(2) R-value (우측값)

  • 일시적으로 존재하며 변경할 수 없는 값
int b = a + 10; // a + 10은 R-value

(3) R-value 참조

  • 이동 연산(move semantics)을 위해 사용
int&& r = 10; // 10은 R-value

4. 함수 호출 시 스택 메모리 구조

함수가 호출될 때 스택 메모리에 어떻게 쌓이는지 살펴봄.

  1. 함수 호출 시 스택 프레임(Stack Frame) 생성됨
  2. 함수의 매개변수가 스택에 저장됨
  3. 함수 실행이 끝나면 스택 프레임 해제됨

예제 코드와 메모리 변화

void TestFunction(int x) {
    int y = x + 5;
}

int main() {
    int num = 10;
    TestFunction(num);
    return 0;
}

 

 

메모리 변화 과정

  1. main() 실행
    기본적인 메모리영역

  2. main()함수에서 num 초기화
    코드실행시 num 초기화 부분



  3. TestFunction 실행 하여 스택에 공간 생성  매개변수 x = 10 스택에 저장 지역 변수 y 스택에 저장됨 (y = 15)
    함수 호출 후 내부의 변수값들



  4. TestFunction 실행 완료 후 스택에서 yx 해제됨
    함수 실행 후 메모리영역


  5. main() 종료 후 프로그램 종료
    코드를 실행 후 없어진 메모리영역

 

 

 

 

 

'공부 > C++' 카테고리의 다른 글

C++ Class  (0) 2025.03.07
C++ 포인터와 레퍼런스  (0) 2025.03.07
변수의 선언과 초기화 & 메모리 할당 과정  (0) 2025.03.05
기본 - C++ 프로그램의 메모리 구조  (0) 2025.03.05
기본 - 컴파일러  (0) 2025.03.05