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 |