외부스택vs내부스택. 메모리계층 구조. 스택포인터&프레임포인터에 대해 조사하고, 복사생성자와 대입연산자의 차이점 구분, 연산자 오버로딩 복습(오버로딩과 오버라이딩 설명&차이점)

 

메모리의 구조

 

  프로그램을 실행하기 위해 컴퓨터가 가장 먼저 하는 일은 프로그램 로드(load)이다. 흔히 로딩(loading)이라고 부르는 과정을 의미하며, 메모리에 프로그램을 불러오는 것을 의미한다. 이때, 프로그램에서 사용되는 변수나, 프로그램의 코드에 대한 메모리 공간은 각각 다르다. 

 프로그램은 크게 4가지 공간을 메모리에 할당받는다. 스택영역, 힙영역, 데이터영역, 코드영역으로 나뉜다.

스택영역

스택(stack)영역은 함수의 호출에서 얻게되는 지역변수나 매개변수가 저장되는 영역이다. 함수가 호출되면서 스택영역을 할당받으며, 함수와 함께 소멸한다. 이때, 스택영역에 저장되는 함수의 호출정보를 스택프레임(stack frame)이라고 말한다.

스택의 ADT를 살펴보면 push를 통해 데이터를 저장하고, pop으로 데이터를 인출하는 후입선출의 구조이다. 쉽게 생각하면 탄창과 같은 구조이기에 나중에 넣은 총알을 가장 먼저 발사하게 되는 구조이다.

힙영역

힙(heap)영역은 사용자가 직접 관리할 수 있고, "해야 하는"(must to) 메모리 영역이다. 사용자에 의해 메모리 공간이 동적으로 할당되고 해제된다.

데이터영역

데이터(data)영역은 프로그램의 전역변수와 정적(static)변수가 저장되는 영역이다. 프로그램의 시작에 할당이 되며 프로그램 종료시 소멸된다.

코드영역

코드(code)영역은 실행할 프로그램의 코드가 저장되는 영역으로 text영역이라고도 한다.

스택 포인터(stack pointer, sp)

 

CPU 안에는 스택에 데이터가 채워진 위치를 가리키는 레지스터인 스택 포인터(SP)를 갖고 있다. 즉, 스택 포인터란 레지스터중 하나를 의미한다. 스택포인터가 가리키는 곳까지가 데이터가 채워진 영역이고, 그 이후부터 스택 끝까지는 비어있는 영역이다.

스택에 새로운 항목이 추가되거나 스택에서 데이터가 제거되면, 스택 포인터의 값이 증가하거나 감소하는 식의 역할이다.

프레임 포인터(frame pointer, fp)

 

프레임 포인터 또한 레지스터이다. 함수 호출 이전의 스택포인터 위치를 기억하는 레지스터이다. 함수의 중첩시, 프레임 포인터의 값을 덮어쓸수 있기에 유의해야한다.

복사생성자 vs. 대입연산자

복사생성자는 객체의 복사가 이루어질때 생성되는 생성자이다.

대입연산자는 = 기호를 의미한다.

복사생성자와 대입연산자는 유사한 점이 많다. 복사 생성자의 대표적인 특성 세가지는 

  1. 정의하지 않으면 디폴트 복사생성자가 삽입된다.
  2. 디폴트 복사생성자는 얕은 복사를 진행한다. 
  3. 생성자 내에서 동적할당을 한다면, 깊은 복사가 필요하다면 직접 정의해야한다.

대입 연산자의 특징 세가지는 다음과 같다.

  1. 정의하지 않으면 디폴트 복사생성자가 삽입된다.
  2. 디폴트 복사생성자는 얕은 복사를 진행한다. 
  3. 생성자 내에서 동적할당을 한다면, 깊은 복사가 필요하다면 직접 정의해야한다.

차이점이 있다면, 호출되는 시점이다. 

복사생성자는 객체가 생성될때 호출되고, 대입연산자는 객체가 이미 생성된 후 호출된다.

 

 

오버로딩 vs. 오버라이딩

오버로딩과 오버라이딩은 이름뿐만 아니라 비슷한점이 많다. 정의부터 차근차근 살펴보면,

오버로딩은 함수를 여러개 정의하고, 매개변수의 유형이나 개수를 다르게하여 다양한 호출을 구분할수 있게 하는 것.

오버라이딩은 상속시, 상위 클래스가 갖고있는 함수를 하위클래스에서도 사용할 수 있도록 덮어쓰는 것 이다.

오버로딩의 경우, 함수 이름은 동일하고, 매개변수&타입은 다르며, 반환형은 상관없다.

오버라이딩의 경우, 함수 이름, 매개변수&타입 동일하며, 반환형 또한 동일해야한다.

 

 

 

 

'스터디 관련' 카테고리의 다른 글

CS스터디 02회차, ~06월 09일(목)  (0) 2022.06.09
CS스터디 01회차, ~06월 02일(목)  (0) 2022.06.02
1/6일 스터디 과제  (0) 2021.01.06
이번 스터디 과제,,  (0) 2020.12.31
소프트웨어 생명주기 6단계  (0) 2020.12.30

+ Recent posts