~ 2019 유물

기술 면접 답변(21~30)

수빈2 2019. 11. 6. 12:39

21. C와 C++의 차이점

22. C와 C#의 차이점

23. C++11 어떤지

24. C++에서 가상 함수 테이블에 대해 설명

25. 지역변수와 전역변수가 메모리상에 어디에 어떻게 놓이는지

26. 메모리 단편화 설명

27. 페이지폴트 설명

28. 컨텍스트 스위칭 설명

29. 스택과 힙 설명

30. stdcall과 cdecl의 차이

 

 

21. C와 C++의 차이점

  - c는 절차지향, c++ 객체지향을 따르는 프로그래밍 언어

  - 즉, C는 함수기반, C++은 객체 중심

  - C++은 예외처리 기술 지원

  - C++은 class를 쓴다.

 

22. C와 C#의 차이점

 - C#은 자바의 영향을 받은 객체지향 언어

 - 포인터가 없다

 

23. C++11 어떤지

 - auto 키워드 : 프로그래머가 직접 타입 지정 x, 컴파일러가 자동으로 지정

 - 범위 기반 for문 : for 루프 순회 값의 초기값, 배열 길이 지정 x 그냥 for(auto i:v) 하면 됨 

 - 유니폼 초기화 : 벡터 쓸 때 기존에는 값을 push_back 해서 넣어줬지만 지금은 배열처럼 대괄호로 선언할 수 있음

 - decltype 키워드 : 특정한 식의 타입을 얻고자 할 때  타입 자동 지정해줌

 - array 추가 : 정적 배열, 기존 배열처럼 stack에 저장, 기존 배열보다 유용한 함수가 많음(vector는 heap에 저장, 동적 배열)

24. C++에서 가상 함수 테이블에 대해 설명

  - 정적 결합 : 링크 시점에 이미 어디 함수를 호출할지 결정함 ( 일반적인 함수들 )

  - 동적 결합 : 프로그램 실행 중에 호출할 함수 결정( 가상 함수 )

  - 가상 함수 테이블 : 동적 결합되는 객체의 타입을 판별해서 타입에 맞는 함수를 선택해야함 이때 vtable이라는 가상함수 목록을 작성하고, 각 객체에 vtable을 가리키는 숨겨진 멤버 vptr을 추가함.

 

25. 지역변수와 전역 변수가 메모리상에 어디에 어떻게 놓이는지

 - 지역변수 : 함수를 벗어나면 자동 소멸, 스택에 놓임

 - 전역 변수 : 프로그램 시작과 동시에 메모리에 할당, 종료 시까지 존재, 데이터 영역에 놓임

* 메모리 구조(1->4 / 낮은 주소 -> 높은 주소)

 1. 코드 영역 : 실행할 코드가 저장

 2. 데이터 영역 : 전역 변수, 정적 변수 저장 (프로그램 시작 할당 종료 소멸)

 3. 힙 영역 : 사용자에 의해 동적으로 메모리가 할당됨 (↓이방향 순으로 할당됨)

 4. 스택 영역 : 지역변수 저장됨 (함수 호출 시 할당, 종료 소멸 , ↑ 이 방향으로 쌓임)

 

26. 메모리 단편화 설명

 - 메모리의 공간이 작은 조각으로 나뉘어 사용 가능한 공간은 많지만 할당이 불가능한 상태

 - 내부 단편화 : 프로세스가 필요로 하는 양보다 큰 메모리가 할당되어 공간이 남을 때

 - 외부 단편화 : 작은 메모리 공간들이 흩어져있어서 할당할 수 없는 상황

 - 페이징 : 가상 메모리 사용, 외부 단편화 해결, 내부 단편화 존재, 사용하지 않는 프레임을 페이지에 옮기고 필요한 메모리를 페이지 단위로 프레임에 옮기는 기법. PAGE MAPPING 과정이 필요하므로 PAGING TABLE을 만든다.

  * 페이지 단위를 작게 하면 내부 단편화를 해결할 순 있겠지만 PAGE MAPPING 과정이 많아지므로 효율이 떨어짐

 - 세그멘테이션 : 가상 메모리 사용, 내부 단편화 해결, 외부 단편화 존재, 가상 메모리를 서로 크기가 다른 논리적 단위인 세그먼트로 분할해서 메모리를 할당, 각 세그먼트는 연속적 인공 간에 저장되어있고 크기들이 다 다르기 때문에 미리 분할해 둘 수 없음.

- 메모리풀 : 필요한 메모리 공간을 필요한 크기, 개수만큼 사용자가 직접 지정하여 미리 할당받아 놓고 필요할 때마다 사용, 외부/내부 모두 일어나지 않음. 그러나 메모리가 메모리 낭비량보다 커졌을 때는 단점이 된다.

 

27. 페이지 폴트 설명

 - 운영체제는 가동 중인 프로세스의 내용 중 덜 중요한 것은 하드디스크에 옮겨 놓음 -> 동작 중 필요한 경우 하드디스크에서 찾아서 데이터 가져옴

 - 페이지 폴트 : 페이지가 물리 메모리에 부재하는 경우 -> 요구 페이징

 - 추후 추가하기

 

28. 콘텍스트 스위칭 설명

 - 현재 처리 중인 프로세스의 PCB(문맥)을 따로 저장하고 다른 PCB(문맥)을 가져오는 것

 - CPU에 동시에 여러 가지 일을 시킬 때, CPU의 자원을 효율적으로 사용하기 위함.

 

29. 메모리의 스택과 힙 설명

 - 스택은 컴파일 타임에 크기를 결정하고, 함수 호출 시 지역변수 매개변수 생성 -> 함수 호출이 완료되면 소멸

 - 힙은 런타임에 크기가 결정되고 프로그래머가 필요할 때마다 동적으로 할당함

 

30. stdcall과 cdecl의 차이

 - 두 개다 함수 호출 규약이고 스택에 쌓은 파라미터를 제거할 때 차이점이 있음

- __stdcall(standard call) : 호출이 된 쪽에서 파라미터 값을 제거

- return이 일어날 때 정리됨, 빠르지만 미리 파라미터 개수를 알아야 하므로 가변 인자를 받을 수 없음

 - __cdecl(C delcaration) : 호출을 하는 쪽에서 파라미터 값을 제거함. 

 - stack을 정리하기 위한 명령어 한 줄 추가됨

 

'~ 2019 유물' 카테고리의 다른 글

할일  (0) 2019.12.07
기술 면접 답변(31~40)  (0) 2019.11.12
기술 면접 답변(11~20)  (0) 2019.11.04
기술 면접 답변(1~10)  (0) 2019.10.31
기술 면접 질문 모음  (0) 2019.10.30