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

정적 링킹 vs 동적 링킹

1. 개요오늘은 정적 링킹 vs 동적 링킹에 대해 알아보겠습니다.1. 정직 링킹정적 링킹이란 실행 가능한 목적 파일을 만들 때 프로그램에서 사용하는 모든 라이브러리 모듈을 복사하는 방식을 말하며 링커에 의해 이루어집니다.즉, 자신이 작성한 프로그램에서 A라는 외부 함수를 사용했다면, A라는 외부 함수에 대한 정보를 자신이 작성한 프로그램의 실행파일을 만들 때 복사해옵니다.5개의 프로그램에서 A라는 외부 함수를 이용하는데 이때 정적 링킹 방식을 사용하면 5개의 프로그램의 실행 가능한 목적파일 각각에 A의 정보가 담긴다.즉, 중복이 발생한다.따라서 정적 링킹으로 만들어진 프로그램은 크기가 크고 메모리 효율이 좋지않습니다.또한, 정적 링킹을 이용하면, A라는 함수에 변화가 생길 경우 그 변화를 적용하기 위해서..

템플릿(Template)

1. 개요오늘은 C++에 템플릿(template)에 대해 알아보도록 하겠습니다.2. 설명템플릿은 어린시절에 한번쯤 사용했을 모양자와 같습니다. 모양자에는 다양한 종류의 도형들이 틀로 만들어져 있습니다. 이 틀을 활용하면 누구나 정말 반듯한 네모를 그릴수도 있고 별도 그릴수 있습니다. 템플릿의 생산성이 뛰어난 이유도 이와 같습니다. 정말 완성도 높은 코드를 모양자로 찍어내듯 생성할 수 있기 때문입니다. 특히 소스코드의 완성도를 높인 상태에서 STL처럼 확실하게 검증된 라이브러리를 사용한다면 완성도와 생산성, 두마리 토끼를 한꺼번에 잡을 수 있습니다. 템플릿을 많이쓰면 컴파일 속도가 느려지지만 최신 C++ 개발 트렌드를 따르려면 템플릿은 선택이 아니라 필수입니다. 생산성이 높고 유지보수성이 뛰어난 코드가 당..

C++ 11 범위기반 for문 (for each)

1. 개요오늘은 for each에 대해 알아보겠습니다.2. for each?기존 for문은 조건을 입력을 하여 돌리는 형식입니다.vector arr = {1,2,3,4,5,6};for(int i=0;i하지만 for each문을 사용하면 쉽게 조건문을 안넣고 사용이 가능합니다.vector arr = {1,2,3,4,5,6};for(int i : arr){ cout여기서 int i 는 arr에 인덱스 별로 값을 복사받아 출력을 하는 문장입니다.하지만 이것을 참조변수로도 가능합니다.vector arr = {1,2,3,4,5,6};for(int& i : arr){ i = 60; cout이러면 arr에 있는 내용 전부가 60으로 변경이 될겁니다.또한 auto문을 사용하여 for each를 사용할수 있습니다. 물론..

extern 쓰는법

1. 개요오늘은 extern을 쓰는 방법에 대해 알아보겠습니다.2. extern 사용법C++ 로 코딩을 하다보면 다른 파일에서 선언한 전역변수를 호출하여 사용을 하고 싶을 때가 있을겁니다.그럴 때를 위해 extern 으로 선언을 하여 사용을 할수가 있는데 다음과 같습니다.test.cpp에 int n = 10 이라고 선언된 전역변수를main.cpp에 호출해서 사용하고 싶으면main.cpp 젤 위쪽에 extern int n; 을 선언하고 사용을 하면 됩니다. ex)test#includeint n=10;main#includeextern int n;using namespace std;int main(){ cout 그럼 static이 붙혀져있는 경우는 어떨까요?아쉽게도 static은 현재 파일에서만 사용할수있는 ..

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