c++이론 Flashcards

1
Q

부동소수점에 대하여 설명해주세요.

A
  1. 부동소수점이라는 표현은 소수점의 위치가 고정되어 있지 않다는 것을 의미합니다.
    - 한정된 비트에 정수와 소수부분을 분할하여 배치할 경우: 고정 소수점을 사용하게 된다면 나타낼 수 있는 범위가 한정적이지만, 부동소수점을 채택할 경우 훨씬 넓은 범위의 수를 표현 할 수 있게 됩니다.
  2. 이진수를 사용하여 표현되며, 부호, 지수, 가수로 구성됩니다.
  3. 부호는 1비트, 지수는 float에서 8비트, 가수는 float에서 23비트를 차지합니다.
  4. 특별한 값으로 INF와 NaN이 있습니다.
    - INF 는 지수부가 모두 1, 가수부가 모두 0일 때,
    - NaN은 지수부가 모두 1, 가수부가 하나라도 1일 때 나타냅니다.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

바이어스 표현법이란 무엇인가요?
왜 바이어스 표현법을 사용하는가?

A

지수부를 표현할 때, 바이어스 표현법이 사용됩니다. 지수부에 바이어스 값을 더하여 양수만을 표현하는 것입니다.

예를 들어, 8비트의 지수부를 사용하는 경우, 바이어스 값은 127입니다. 따라서 지수부가 모두 0일 때 실제 지수값은 -127이 되며, 지수부가 모두 1일 때는 +128이 됩니다. 중간 값인 127은 실제로 0을 의미합니다.

왜 바이어스 표현법을 사용하는가?
1. 지수부에 대한 비교가 쉬워집니다. 부호와 절댓값을 따로 고려하지 않고, 바이트 값 자체로 크기 비교가 가능합니다.
2. 양수와 음수 모두 표현: 바이어스를 사용하면 지수부만으로도 양수와 음수를 모두 표현할 수 있습니다.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

실수 표현시 오차가 발생하는 이유는 무엇인가요?

A

부동소수점 수는 실제 수를 가수와 지수로 분리하여 표현합니다.
float 타입에서 가수부는 23비트를 사용하여 표현되며, 이는 실제로 숫자를 표현하는 비트입니다.
가수부의 최상위 비트는 항상 1이기 때문에 저장되지 않습니다. 따라서 실제로 표현할 수 있는 비트는 23개입니다.
따라서 실제로 표현되는 가수부 값은 1.xxxxx… 형태를 가집니다. 여기서 x는 나머지 23비트입니다.
예를 들어, 가수부가 24비트로 표현될 경우 최상위 비트는 1이고 나머지는 23비트입니다.
가수부가 25비트로 표현될 경우 최상위 2비트는 1이고 나머지는 23비트입니다.
마찬가지로, 가수부가 49비트로 표현될 경우 최상위 2비트는 1이고 나머지는 47비트입니다.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

문자열에 대해 설명해주세요

A

문자열은 문자의 연속된 배열 또는 집합으로 정의됩니다. 이 문자들은 알파벳, 숫자, 기호, 공백 등이 될 수 있습니다.
c++에서는 표준 라이브러리 string 클래스를 제공하여 쉽게 문자열을 다룰 수 있게 했습니다.
또한, NULL이 포함되어 있는데, 문자열 끝에 넣어, 어디까지 문자열인지 판별할 수 있도록 합니다. 이는 문자열을 파악 하는데에 연산량을 늘려주는 단점이 될 수 있습니다.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

참조자에 대하여 설명해주세요. (답안 수정 필요)

A

참조자란 CopyPointer를 의미합니다.
참조 연산자로 초기화 할 경우, 주소 연산자가 생략되고 직접 접근시 간접 연산자가 생략되는 형태라고 볼 수 있습니다.
일반적으로 참조 타입 객체가 초기화 되는 과정은 포인터 영역이 마련되며, 초기화되는 변수의 주소가 포인터 영역으로 작성 됩니다.
이는 참조 객체의 메모리 공간이 확보된다는 뜻이며, 주소를 복사라는 포인터라는 것을 의미합니다.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

타입 추론 자료형에 대해 설명해주세요.

A

타입 추론 자료형은 컴파일러에게 변수의 타입을 자동으로 결정하도록 지시하는 키워드입니다. auto를 사용할 때는 반드시 초기화가 이루어져야 합니다. 초기화 없이 auto만으로 변수를 선언하는 것은 허용되지 않습니다.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

빌드 과정중 전처리 지시문들의 역할을 아는대로 말해주세요.

A

define은 매크로를 정의하는 지시문입니다.

전처리기는 컴파일 이전에 소스코드에 특별한 작업을 수행하도록 지시하는 기능을 합니다. 이는 소스코드를 수정하지 않고도 번역을 통제하거나, 기존에 존재하는 소스코드의 기능을 추가/ 변경 하는 데 도움을 줍니다.

전처리 지시문 중 하나인 #include는 특정 헤더 파일이나 소스 파일의 내용을 현재의 소스 코드 위치에 포함시키는 역할을 합니다.
예를 들면, 표준 라이브러리나 사용자 정의 헤더 파일을 현재의 소스코드에 포함시킬 때 사용됩니다.

이를 통해 코드 내 반복되는 값을 또는 코드 조각을 간편하게 재사용할 수 있습니다.

또한, 조건부 컴파일을 위한 지시문들로는 #if, #ifdef, #ifndef 등이 있습니다. 이들은 특정 조건에 따라 컴파일을 수행하도록 지시하는 역할을 합니다.

마지막으로 #pragma once는 헤더 파일의 중복 포함을 방지하는 지시문입니다. 이 지시문이 포함된 헤더 파일은 한 번만 포함되어 컴파일 되므로, 중복 정의나 다른 문제를 예방할 수 있습니다.

이렇게 전처리 지시문은 프로그램의 효율성과 유지보수성을 높이는 중요한 역할을 합니다.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

가상 메모리에 대해 간단히 설명해주세요.

A

프로그램에게 독립적인 메모리 공간을 제공하면서 물리적 RAM의 크기를 초과하는 프로그램을 실행할 수 있게 도와주는 메모리 관리 기술입니다.
32bit 시스템에서 각 프로세스는 4GB 메모리를 부여받게 되며 보통 윈도우의 경우, 프로세스에게 부여된 절반은 운영체제가, 나머지는 프로세스 자체가 사용합니다.
이 기술을 통해, 운영체제는 물리적 RAM을 효과적으로 확장하며 프로그램에게 마치 더 큰 메모리 공간이 있는 것처럼 느끼게 합니다. 실제로는 하드 드라이브의 일부를 RAM처럼 사용하되, 필요한 데이터가 RAM에 없을 때 이를 ‘스왑’하는 방식으로 작동합니다.
가상 메모리를 활용하면, 여러 프로그램들이 각각의 독립적 메모리 공간에서 실행될 수 있어, 메모리 관리가 효율적으로 이루어집니다.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

malloc()과 free, new & delete 차이에 대해 말씀해주세요.

A

malloc과 free는 C에서 동적 메모리 할당 및 해제를 위해 사용되는 함수로, 헤더 파일 stdlib.h에 선언되어 있습니다. malloc은 지정된 크기의 메모리를 할당하고 그 메모리의 주소를 반환하는 반면, free는 할당된 메모리를 해제하는 데 사용됩니다. malloc으로 할당된 메모리는 반드시 free로 해제되어야 합니다.

반면에 new와 delete는 C++에서 동적 메모리를 할당 및 해제하기 위한 연산자입니다. new는 특정 타입의 메모리를 할당하고 초기화하며 해당 주소를 반환합니다. 만약 메모리 할당에 실패하면 std::bad_alloc 예외를 발생시킵니다. delete는 new로 할당된 메모리를 해제하는 데 사용됩니다.

간략히 말하면, 할당과 초기화에 있어서 new는 타입 안전성을 제공하며, 객체의 생성자와 소멸자를 호출하는 등 C++의 특성에 맞게 설계되었습니다. 반면 malloc과 free는 단순히 메모리의 할당 및 해제만을 담당합니다.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

free와 delete 시에 할당받은 메모리의 크기만큼 정확하게 해제 되는 이유에 대해서 설명해보세요.

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

동적할당한 배열 해제시 delete[]를 적절히 활용하는 이유에 대해 설명해보세요.

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

선언과 정의에 대해 설명해보세요.

A

선언은 이름, 반환 유형 및 파라미터 등의 정보만 제공하는 반면, 정의는 실제 메모리를 할당하고 초기화하는 작업을 포함합니다.

정의의 경우, 함수 정의 시 code 영역에 메모리 공간을 확보 시켜야 하며, 객체 정의시 data, heap, stack 영역에 메모리 공간을 확보해야 합니다.
선언의 경우, 외부 cpp에 선언되어 있는 전역 변수나 전역 함수 등을 사용할 때 함수의 시그니처, extern 을 사용할 수 있습니다. 이는 해당 변수나 함수의 정의가 다른 곳에 있음을 나타냅니다.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

암시적 생성자, 소멸자에 대하여 설명해보세요.

A

암시적 생성자: 이는 클래스에 사용자 정의 생성자가 정의되어 있지 않을 때, 컴파일러가 필요시, 자동으로 제공하는 기본 생성자를 의미합니다.

소멸자: 객체의 생명주기가 끝날 때 호출되며, 클래스 내에 소멸자가 명시적으로 주어지지 않는다면, 컴파일러는 기본 소멸자를 제공합니다. 이 소멸자는 특별한 작업을 수행하지 않지만, 멤버 객체의 소멸자는 호출됩니다.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

포인터에 대해 설명해주세요.

A

포인터는 메모리 주소를 저장하는 변수로, 다른 변수나 데이터의 위치를 가리키는 역할을 합니다. 이를 통해 메모리의 특정 위치에 직접적으로 접근할 수 있게 해줍니다. 메모리 낭비를 줄일 수 있고, 메모리 영역이 다르더라도 원하는 공간에 접근 할 수 있는 유용함이 있습니다.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

구조체와 클래스의 차이에 대해 설명 해주세요.

A

구조체에서는 기본적으로 멤버들이 public으로 설정되어 외부에서 접근이 가능하나,
클래스에서는 멤버들이 기본적으로 private으로 설정되어 외부 접근이 제한됩니다.
또한, 구조체는 주로 데이터의 집합을 표현하는 데 사용되는 반면,
클래스는 데이터와 그 데이터를 조작하는 함수를 함께 포함하는 데 주로 사용됩니다.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

클래스의 메모리 배치 규칙에 대해서 설명해주세요.

A
  1. 클래스의 멤버 변수들은 선언된 순서대로 메모리에 배치됩니다.
  2. 멤버 변수들 사이에는 패딩(padding)이 삽입될 수 있어, 구조체나 클래스의 전체 크기가 각 멤버 변수의 크기의 합과 일치하지 않을 수 있습니다. 이는 주로 메모리 정렬을 위해 발생합니다.
  3. 상속받은 클래스의 경우, 부모 클래스의 멤버 변수들이 자식 클래스의 멤버 변수들보다 먼저 메모리에 위치합니다.
  4. 가상 함수가 포함된 클래스의 경우, 가상 테이블 포인터(vtable pointer)가 클래스의 메모리 내에 추가될 수 있습니다.
16
Q

클래스 선언시 암시적으로 정의되는 메소드는 무엇이 있나요?

A

기본 생성자, 기본 소멸자, 복사 생성자, 복사 대입 연산자, 이동 생성자, 이동 대입 연산자가 생성됩니다.