2020년 6월 15일 월요일

Capter2( const, 실행중인 프로그램의 메모리 구조, 참조자, 참조자와 함수)


  • 키워드 Const
    • const int num = 10;   -> 변수 num을 상수화한다.
    • const int* ptr1 = &val1;  -> ptr1을 통해서 val1의 값을 수정하지 못한다.
    • int* const ptr2 = &val2;  -> ptr2는 상수화 된다. 따라서 val2의 주소외 다른 주소를 못가진다.
    • const int* const ptr3 = &val3;  -> ptr3는 상수화 되고, ptr3을 통해 val3의 값을 수정하지 못한다.

  • 실행중인 프로그램의 메모리 구조
    • 코드 영역 : 메모리의 코드영역은 실행할 프로그램의 코드가 저장되는 영역으로 텍스트영역이라고도 부른다. CPU는 코드영역에 저장된 명령어를 하나씩 가져와 처리하게된다.
    • 데이터 영역 : 프로그램의 전역 변수와 정적(static)변수가 저장되는 영역이다. 데이터 영역은 프로그램의 시작과 함께 할당되며, 프로그램 종료시 소멸된다.
    • 스택 영역 : 함수의 호출과 관계되는 지역변수와 매개변수가 저장되는 영역이다. 스택영역은 함수의 호출과 함께 할당되며, 함수호출이 완료되면 소멸한다. 이렇게 스택영역에 저장되는 함수의 호출정보를 스택프레임 이라고 한다. 스택은 푸시동작으로 데이터를 저장하고 팝동작으로 데이터를 인출한다. 가장 늦게 저정된 데이터가 가장 먼저 인출되는 구조이며, 메모리의 높은 주소에서 낮은 주소의 방향으로 할당된다.
      • 스택 프레임 : 함수가호출되면 스택에는 함수의 매개변수, 호출이 끝나고 돌아갈 반환 주소값, 함수의 선언된 지역변수 등이 저장된다. 이렇게 스택영역에 차례대로 저장되는 함수의 호출 정보를 스택프레임 이라고 한다. 스택프레임으로 인해 해당 함수가 함수의 일을 마친뒤 이전 상태로 돌아갈수 있는것이다.

    • 힙 형역 : 사용자가 관리할 수 있는 메모리 영역이다. 사용자에 의해 메모리를 동적으로 할당하고 해제하며 메모리의 낮은 주소에서 높은 주소의 방향으로 할당된다.
  • 참조자(Renference) : 할당된 하나의 메모리 공간에 둘 이상의 이름을 부여하는것으로 &연사자를 이용한다.  &연산자는 변수의 주소를 반환하는 연산자 이지만 변수 선언시 사용하게 되면 참조자의 선언이 된다. (ex int &num2 = num1; ) 
    • 참조자는 별칭이다.
    • 참조자의 수에는 제한이 없으며, 참조자를 대상으로도 참조자를 선언할수 있다.
  • 참조자와 함수 : C언어에서 Call-by-reference는 포인터를 이용하여 변수의 값을 수정하였다. 하지만 C++에서는 참조자를 이용하여 Call-by-reference구현할수 있다. 아래 구현 내용을 참고한다. 


댓글 없음:

댓글 쓰기

VITIS Git + Doxygen Config

 Doxygen Configure 1. Vitis 메뉴의 Window->Preference의 C/C++ -> Editor의 Documentation tool comments 기본 설정값을 Doxygen으로 변경 설정 후 함수 바로 위에서 /...