전체 글 115

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

C++ atomic객체

1. 개요 오늘은 C++ 의 atomic객체에 대해 공부하도록 하겠습니다. 2. Race Condition C++에서 모든 쓰레드들이 전부 랜덤하게 작용합니다. 아래의 코드를 보시겠습니다. #include #include #include #include using namespace std; void worker(int& cnt) { for (int i = 0; i < 10000; i++) { cnt++; } } int main() { int cnt = 0; vector workers; for (int i = 0; i < 4; i++) { workers.push_back(thread(worker, ref(cnt))); } for (int i = 0; i < 4; i++) { workers[i].join()..

카테고리 없음 2024.03.30

VTable 위치 파악

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

메모리 영역

1. 개요 오늘은 메모리 영역의 대해 알아보도록 하겠습니다. 2. 메모리 영역 메모리 영역에는 다음과 같이 나눠져있다. 하지만 자세히 나눠보면 아래와 같이 나눌수있다. RODATA, DATA, BSS는 모두 DATA영역으로 표시하고 다르게 동작을 한다. 1. Text 영역 (code 영역) 우리가 작성한 코드가 컴파일 된후 기계어로 번역되어 저장되어있는 곳이다. 오직 읽기 전용이다. %eip를 통해 읽어서 코드가 실행된다. 프로그램이 끝날때까지 메모리에 남아있다. 전역상수는 여기에 저장된다. 2. Rodata 영역 Rodata는 해석하면 Read only data로, 읽기전용인 data들이 들어간다. 주로 상수, 상수형 문자열, printf의 중괄호 부분이 들어간다. 오직 읽기 전용이다. 3. Data ..

언리얼 엔진 액터의 생명주기(액터 스폰)

1. 개요 오늘은 언리얼 엔진의 엑터 생명주기 액터 스폰으로 시작하겠습니다. 2. 액터 스폰 액터를 스폰(인스턴싱)할 때 따르게 되는 경로입니다. SpawnActor (액터 스폰)이 호출됩니다. PostSpawnInitialize (스폰 초기화 이후)가 호출됩니다. PostActorCreated 액터 생성 이후 - 스폰된 액터의 생성 이후에 호출됩니다. 생성자같은 것이 여기에 와야 합니다. PostActorCreated (액터 생성 이후)는 PostLoad (로드 이후)와 상호 배제적입니다. ExecuteConstruction (생성 실행): OnConstruction 생성시 - 액터의 생성 지점으로, 블루프린트 액터가 컴포넌트를 만들고 블루프린트 변수를 초기화시키는 곳입니다. PostActorConst..