개발자 면접 공부 111

정적 링킹 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

가상메모리, 번외(why name random access memory?)

1. 개요 오늘은 가상메모리에 대해 알아보겠습니다. 2. 가상메모리? 가상메모리라는 말을 들었을때 물리적 메모리가아닌 가상? 이라는 생각을 먼저했었습니다. 도대체 가상메모리란 무엇이며 현재 많은 용량을 저장할수 있는 물리메모리를 굳이 가상메모리와 나눴는지 공부가 필요했습니다. 3. 결국 공간과 보안을 위해 가상메모리를 이렇게 정의할수 있습니다. 가상 메모리(Virtual Memory)는 운영체제에서 실제 물리 메모리(RAM)보다 큰 주소 공간을 프로세스에 제공하기 위해 사용되는 기술 CPU가 프로세스를 처리할 때, 특정 시점에 프로세스의 특정 메모리를 접근 하는 주소값은 아주 작을 것이다. 그 주소값이 아주 작다는 점을 착안하여 고안된 방법이며, 가상 메모리는 프로세스와 관련된 주소값을 저장하는 메모리 ..

임계영역(Critical Section)

1. 개요 오늘은 임계영역(Critical Section)에 대해 알아보겠습니다. 2. 임계영역 임계영역을 설명하기 전에 봤던 내용중 Race Condition(경쟁 상태)를 알아야합니다. 경쟁 상태란 두 개 이상의 멀티 쓰레드가 하나의 자원을 두고 경쟁을 하는 상태로 잘못된 값을 가질수있다고 하였습니다. https://chogyujin-study.tistory.com/104 Race Condition 경쟁상태 1. 개요 오늘은 OS에 경쟁상태 Race Condition에 대해서 공부하도록 하겠습니다. 2. Race Condition(경쟁상태)? 경쟁상태란 두 개 이상의 cocurrent한 프로세스(혹은 스레드)들이 하나의 자원(리소스)에 접근 chogyujin-study.tistory.com 그렇다면 ..

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문에서 전위증가 후위증가 차이점..