1.C 언어에서 볼레타일, 논볼레타일에 대하여 설명하시오
Volatile : 키워드 중 하나입니다. volatile로 선언된 변수는 외부적인 요인으로 그 값이 언제든지 바뀔 수 있음을 뜻합니다.
Nonvolatile : 위의 Volatile의 반대입니다.
2.스택이란?
함수로 전달되는 인수, 지역변수 등의 임시 변수들이 저장되고 함수 실행 후 돌아갈 복귀 번지도 저장되는 기억장소
3.세마포어란? 뮤텍스와의 차이는?
한정된 자원을 여러개의 프로세스들이 사용해야 할 경우, 프로세스들 간에 자원 사용시 충돌이 없도록 하기 위해서 세마포어를 사용합니다.
Critical Section을 가진 Thread들의 running time이 서로 겹치지 않게, 각각 단독으로 실행되게 하는 기술입니다
세마포어는 스레드간 재진입이 가능하나 뮤텍스는 오직 한 개의 스레드 만이 진입 할 수 있습니다.
4.코드가 컴파일하는 일련의 과정과 각 단계별 산출물을 설명하시오
컴파일러는 text로 만들어진 파일(사람이 알아볼 수 있는 파일)을 기계가 알아 볼 수 있는 파일로 변환합니다. 그렇게 만들어지는 파일이 오브젝트 파일(바이너리 파일) 입니다. 이 파일은 메모리에 재배치가 가능하게 되어있습니다. 보통 c 파일 별로 많은 o 파일이 생성됩니다. 실제로는 하나의 exe, elf, 실행가능한 파일로 떨어지는데 그것들의 관계를 규합해주는 것이 lnker입니다. 그 결과물로 앞서 말한 실행 가능한 파일이 생성되게 됩니다.
5.C++에서 private, public, protected에 대하여 설명하시오.
public는 클래스 내부, 외부, 상속 받은 클래스의 내부에서 모두 사용할 수 있는 접근 권한입니다.
private는 오직 클래스 내부에서만 사용할 수 있고, 상속받은 클래스라 할지라도 사용할 수 없는 접근 권한입니다. protected는 클래스 내부와 상속받은 클래스에서 사용할 수 있는 접근 권한입니다.
6.C++에서 Virture 함수란 무엇인가?
class A {...}; class B : public A {......}; (A상속)가 있다고 할 때class A에 print()메소드가 있고 class B에서 이 print()메소드를 오버라이딩했다고 한다면
A *ap; B b;
ap=&b;
ap->print(); <--이렇게 했을경우 C++의 경우 기본적으로 포인트의 자료형에 따라 class A의 print() 메소드가 호출이 됩니다.
정적바인딩(컴파일시간에 호출함수 결정)이라고들 하죠. 그러나 ap가 가리키고 있는 것은 실제 B클래스의 객체이므로 B클래스의 print()메소드가 호출되게 할려면 바로 print()메소드를 가상함수로 만들어 주면 됩니다.
가상함수의 키워드는 virtual입니다. 리턴형앞에 virtual을 붙여주시면 됩니다.
virtual void print() {....};
이렇게 되면 ap->print()를 하게되면 ap가 가르키는 실제객체형에따라 B클래스의 print()메소드가 호출이 됩니다..
동적바인딩(실행시간에 호출함수 결정)이라고들 합니다. 가상함수가 중요한 이유가..다형성의..표현을 위해서 사용합니다.
7.인터럽트 처리루틴에 관하여 설명하시오
1.CPU에게 인터럽트 요청
2.현재 작업중인 주소를 메모리에 저장
3.인터럽트 인지신호 발생
4.벡터 인터럽트 처리
5.리턴에 의한 복귀
임의의 장치에서 [CPU에게 인터럽트 요청-1]을 하면 우선 [현재 상태를 저장-2]하고 CPU는 어느 장치에서 인터럽트가 발생했는지 모르므로 [각 장치에 인터럽트 인지 신호-3]를 보내어 어떤 장치에서 인터럽트를 요청했는지 확인하게 됩니다. 어느 장치인지가 파악이 되면 [벡터 인터럽트를 모두 처리-4]하게 되고 [원래 상태로 복원-5]하게 됩니다
8.인터럽트 함수와 일반 함수의 차이를 설명하시오
일반 서비스 루틴은 CPU가 정해진 시간에 정해진 일을 수행하는 것입니다. 스테이트 머신 이라고도 합니다. 하지만 인터럽트 서비스 루틴은 CPU가 무슨 일을 하고 있던 간에 인터럽트 우선 순위에 의해서 그 일을 먼저 수행하고 일의 수행 완료 후 다시 일반 서비스 루틴으로 돌아가기 때문에 처리 속도가 차이가 나는 것입니다.
9.static 변수에 관하여 설명 하시오
-변수 선언시 앞에다 static이라는 키워드를 붙여서 선언한 변수를 static변수 라고 한다.
-전역 변수와 비슷한 성격을 갖는다.
-전역 변수는 메모리 공간을 할당받고 초기화가 이루어지면, 프로그램이 종료 될때까지 소멸되지 않고 초기화도 두번다시 일어나지 않는다.
-지역내 접근을 허용한다는 지역변수의 특징을 제외하면 오히려 전역 변수에 가깝다.
10.크리티컬 섹션이란 무엇인가?
크리티컬 섹션을 해석하면 "임계영역"이라고 합니다. 즉, Source코드 중에 쓰레드에 의해 서로 간섭이 일어나 문제가 일어날 소지가 있는 코드부분을 위험 영역이라고 정하고 이들 구간은 하나의 쓰레드만이 실행하도록 하는 것입니다.
11.프로세스와 스레드의 차이는 무엇인가?
프로세스는 자식 프로세스와 부모 프로세스가 각각 독립적인 메모리 공간(data, heap, stack등)을 가지지만 쓰레드는 다른 메모리 공간은 공유하며 stack만 독립적으로 가집니다. 이런 차이점으로 쓰레드를 프로세스보다 가볍게 만들어 주는데 CPU는 한번에 하나의 연산처리 밖에 못하므로 context switching을 하는데 프로세스는 메모리 공간이 독립적이어서 data, heap, stack을 올렸다 내렸다 하지만, 쓰레드는 stack만 올렸다 내렸다 하면 되기 때문입니다.
12. 힙 메모리 영역이란?
힙영역에는 프로그래머가 동적할당하는 변수에 대한 메모리 영역이며 프로그램이 종료되거나 메모리를 해제 시킬때까지 유지됩니다.
[출처] 면접 보면서 가장 많이 받은 C, C++관련 질문 과 답변|작성자 노숙자꽥