본문 바로가기
IT/개발

C와 C++

by GGT 2019. 11. 15.

 

1. 스택영역에 있는 구조체가 복사될 때, 메모리에서 일어나는 일을 설명하시오

 

 메모리영역은 코드, 데이터, 스택, 힙 영역으로 나뉘어진다. 

 

 코드 영역은 말 그대로 실행될 프로그램의 코드(텍스트)가 저장되는 영역이다.

 데이터 영역은 전역변수, 정적(static) 변수 및 구조체 등 컴파일시 크기가 결정되는 데이터가 

상주하는 영역을 말한다.

 스택 영역은 런타임에 크기가 결정되는 데이터들이 상주하는 영역이다. 지역변수,  매개변수, 리턴값 등이 

이에 속한다.

 힙 영역은 동적할당을 통해 (malloc,calloc,new) 생성되는 객체들이 상주하는 메모리 영역이다.

 

구조체 vs 클래스

stack에 할당 | heap에 할당

  해당 메모리에 직접 접근 | 어드레스를 통한 간접접근

   값형식 대입연산 | 참조형식 대입연산

 

 

따라서 스택 영역에 존재하는 구조체를 복사할 경우 값에 의한 참조를 통해 

새로운 구조체가 복사된다.

 

2. 깊은 복사와 얕은 복사에 대해 설명하시오.

 

객체를 복사할 때 참조값을 복사하는지의 차이

 

 깊은 복사의 경우 참조값을 가진 A객체의 멤버(ex. char* name)를 

new char[n] 등을 통해 복사된 B객체에게 새 공간을 할당한 후 값을 복사하는 것.

이렇게 되면 복사된 A객체의 name의 값을 바꾼다 하더라도 B에는 영향이 없다.

 

 얕은 복사의 경우 참조값을 가진 A객체의 멤버name을 B에게 b.name = a.name을 통해

참조하는 메모리주소를 복사한다. 따라서 A와 B 둘 중 한 객체의 name만 건드려도 

다른 객체에게 영향이 간다.

 

3. 재귀함수의 문제점을 설명하시오.

재귀 호출시 함수들은 활성 레코드를 스택 메모리에 계속해서 저장하고 

함수 실행이 끝나면 이 할성 레코드들은 stack에서 pop되어 사라지게 된다.

이 과정에서 문맥교환이 계속 일어나므로 수행시간이 늦어진다.

이 뿐만 아니라 스택의 크기를 벗어날 정도로 재귀 호출하게 되면

메모리 부족(stack overflow)가 발생할 수도 있다. 

 

4. 파일 입출력에서 바이너리 파일과 텍스트 파일의 차이점을 있는대로 설명하시오

 

바이너리 파일의 경우 저장 시 바이너리(2진수) 형태로 저장한다.

하지만 텍스트 파일의 경우에는 아스키코드를 통해 저장된다.

반응형

댓글