개발자 면접 공부/C-C++ 45

Volatile

1. 개요오늘은 Volatile에 대해 공부하도록 하겠습니다.2. Volatile?Volatile 키워드는 컴파일러가 최적화를 하면 우리가 원치 않던 코드가 생기는데 이를 방지하고자 하는 키워드입니다. 예를들어 아래의 코드를 보면MyStruct *mystruct;while(!myStruct->flag)){ //some work}이러한 코드가 있을 경우 최적화를 하여MyStruct * mystruct;if(!myStruct->flag){ while(1) { //some work }}이러한 코드로 컴파일러가 바꿔줍니다. 실제로 mystruct->flag가 만약 sensor값으로 언제 변할지 모르는 값이라고 할때 컴파일러의 최적화에 의해서 그런 변화를 감지하지 못하고 whil..

네임 맹글링

1. 개요 오늘은 네임 맹글링에 대해 알아보도록 하겠습니다. 2. 네임 맹글링 컴파일러들은 컴파일을 할때 다른곳에서 접근할수 있도록 심볼을 만드는 작업을 합니다. 여기서 함수를 심볼로 만들때 심볼이름을 함수이름 그대로 생성하는 C 컴파일러와 달리 C++컴파일러들은 각각 정해진 규칙에 따라 심볼이름을 변경하여 생성합니다. 이러한 작업을 네임 맹글링이라고 하며 C와 달리 C++에서 오버로딩을 사용할수있는 이유가 됩니다. 실제로 코드로 설명해 드리겠습니다. #include using namespace std; void test() { cout

C++ for문 증감문에 전위연산자 vs 후위연산자 속도 차이

1. 개요 오늘은 for문에서 전위 후위 증감문에 속도 차이에 대해 알아보겠습니다. 2. 차이 C++ 공부를 하다 보면 for문을 많이 사용할것입니다. 근데 여기서 for(int i=0; i_M_next; return __tmp; } 로 후위증가를 할 경우 값을 저장하기 위해 tmp변수와 복사 연산이 발생하게 됩니다. 따라서 전위증가가 더 효율적 이라고 합니다. 3. Ref https://doo9713.tistory.com/7 for문 증감문에 전위연산자와 후위연산자의 차이 C언어를 공부하면서 처음 C를 배웠을 경우 for문에서 사용할 때 for(int i=0; i doo9713.tistory.com https://d-yong.tistory.com/75 [C/C++] for문에서 전위증가 후위증가 차이점..

VTable 위치 파악

1. 개요 오늘은 가상함수의 필수 가상함수 테이블(Virtual Table)에 위치에 대해 알아보도록하겠습니다. 2. VTable이란? 가상함수 테이블은 클래스 내에서 맴버함수를 virtual 키워드로 지정하면 생성되는 테이블입니다. 특수한 메모리 영역을 활용하여 알맞는 함수를 호출하는데 보통 함수 포인터로 지정이되있습니다. 또한, 가상함수 테이블은 한 객체당 하나의 테이블만 지정이되있으며 함수가 아무리 많아도 한개만 되있습니다. 가상함수 테이블은 OOP의 특징중 다양성을 띄고 있으며 동적 바인딩으로 상속에서 매우 중요한 역할을 합니다. 예전에 올렸던 가상함수 테이블에 대해 링크를 올리겠습니다. https://chogyujin-study.tistory.com/23 C++ Virtual(가상) 함수 오늘은..

초기화자 리스트(intializer_list)

1. 개요 오늘은 초기화자 리스트(Initializer_list)에 대해서 공부하도록 하겠습니다. 2. 초기화자 리스트란? 초기화자 리스트란 중괄호를 사용해서 배열 및 벡터를 초기화할때 많이 사용하는 방식입니다. int arr[] = {1, 2, 3, 4}; 이러한 코드를 많이 보셨을거라 판단됩니다. 그렇다면 아래의 코드는 과연 가능할까요? vector v = {1, 2, 3, 4}; 물론 가능합니다. C++11부터 사용자에게도 이러한 문법을 사용할수 있도록 하게 하였습니다. #include class A { public: A(std::initializer_list l) { for (auto itr = l.begin(); itr != l.end(); ++itr) { std::cout

C++ vs C#

1. 개요 오늘은 C++ 과 C#의 차이점에 대해서 공부하도록 하겠습니다. 2. 둘의 역사 C++ 은 C를 기반으로 새로운 객체 지향 언어 개발하여 만들어진 언어입니다. 1985년에 만들어졌습니다. C#은 Java를 대항하기 위해 마이크로 소프트가 2002년에 만들었습니다. 3. 결국 객체지향 언어 결국 C++ 이나 C#에 공통점은 객체 지향의 언어라는 점 입니다.(C++는 절차 + 객체 혼합인 "멀티 패러다임") 객체 지향의 언어임으로 다음과 같은 공통점을 가지고 시작을 합니다. https://chogyujin-study.tistory.com/54 C++ 객체지향 언어 4가지 특징 오늘은 객체지향 언어 5가지 특징에 대해 공부하겠습니다. 개요 객체지향 언어는 실제 세상의 사물의 개념을 프로그램에서 객체..

스마트 포인터의 new와 make의 차이

1. 개요 오늘은 C++의 스마트 포인터의 new와 make의 차이를 공부하겠습니다. 2. new VS make 스마트 포인터를 동적 할당하는 방식은 new랑 make_unique 등 입니다. 하지만 스마트포인터를 동적할당할때 new보다는 make를 사용하여 할당을 하는것이 매우 효과적이라고 합니다. make는 C++14부터 나온 기법으로 스마트포인터의 동적할당을 담당하고있습니다. 그럼 new보다 나은점을 알려드리겠습니다. 3. new 보다 나은점 1. 객체의 형식이 되풀이 되지 않는다. class Base { public: Base(){} ~Base(){} }; int main() { auto p1 = make_unique(); unique_ptr p2(new Base); } 중복을 피하라는 소프트웨어..