2024/04 5

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