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진수) 형태로 저장한다.
하지만 텍스트 파일의 경우에는 아스키코드를 통해 저장된다.
'IT > 개발' 카테고리의 다른 글
학교 전공종합설계 프로젝트 (2) | 2020.03.07 |
---|---|
[외주] 안드로이드 외주 진행 사항 (0) | 2020.02.05 |
[ERROR] pip install mysqlclient returns "fatal error C1083: Cannot open file: 'mysql.h': No such file or directory 해결 방안 (0) | 2020.01.11 |
ICT COC AI 해커톤 참가 후기(191123 ~ 191124) (1) | 2019.11.28 |
프로젝트 계획(해커톤) (0) | 2019.11.08 |
댓글