목록개인 공부 (21)
초보 코린이의 성장 일지
레이스 컨디션 - 한정된 자원을 동시에 여러 프로세스가 자원을 이용을 위해 경쟁을 벌이는 현상 - 두 개 이상의 프로세스가 공통 자원을 병행적으로 읽거나 쓰는 동작을 할 때 공용 데이터 접근이 어떤 순서에 따라 이루어졌는가에 따라 그 실행 결과가 같지 않고 달라지는걸 의미한다.. - 만일 2개의 프로세스에서 어떤한 수를 3번 더하는 기능을 수행할 때 그 결과값을 얻을 수 있지만, 어떠한 프로세스가 먼저 실행되었는지 알 수 없다. 이 때 Context Switching이 발생하면서 그 문제를 Race Condition라고 부른다. 해결 방법 - Mutex (뮤텍스), Semaphoer(세마포어) - Thread들이 서로 겹치지 않게 단독으로 실행 할 수 있도록 하나의 임계구역을 만들어 준다. Mutex (..
TSharedPtr(공유 포인터) - 자신이 참조하는 개체를 소유하며, 해당 개체의 삭제를 무기한 방지하고 공유 포인터, 공유 참조가 참조하지 않을 때 궁극적으로 삭제를 처리합니다. - 포인터 소유자가 범위를 벗어나거나, 소유권을 포기할 때까지 삭제되지 않는다. - 참조 횟수가 계산되는 포인터, 하나의 포인터를 여러 소유자에게 할당하려고 할 때 사용 - 포인터는 비어 있을 수 있다 즉 어떠한 개체도 참조하고 있지 않다는 의미. - null이 아닌 공유 포인터는 참조하는 개체에 대한 공유 참조를 생성할 수 있다. TSharedRef(공유 참조) - 참조하는 개체를 소유한다는 점에서 공유 포인터처럼 작동한다. - 공유 참조는 항상 null이 아닌 개체를 참조해야 한다. - 공유 포인터에는 제한이 없기 때문에..
가상 메모리 - 가상메모리는 메모리 관리 기법의 하나로, 실제로 이용 가능한 기억 자원을 이상적으로 추상화하여, 사용자들에게 더 큰 메모리로 보이게 만드는 것을 의미한다. - 프로세스에 필요한 데이터를 전부 메모리에 등장시키면, 실행시 걸리는 시간도 오래 걸리고, 불필요한 메모리 낭비도 발생하게 된다. 만일 크기가 작은 메모리를 할당 받고 있다고해도, 다른 프로세스에 오류를 발생시킬 수 있다. 선할당에 부담을 느끼게 될때 가상 메모리 공간을 사용한다. - 만일 8GB가 필요한데, 실제 가지고 있는 용량이 4GB라면, 메모리상에서 실행시킬 수 없다. 이 문제를 해결하고자 나온 개념이 가상 메모리이다. [장점] - 실제 메모리 주소가 아닌 가상의 메모리 주소를 주는 방식이다. - 실제 메모리보다 더 큰 필요..
1. 공통된 개발 툴을 하나의 그래픽 사용자 인터페이스 GUI (Graphical User Interface)로 결합하는 애플리케이션을 구축하기 위한 소프트웨어입니다. 2. 개발자는 개발 수명주기 전체에서, 코드 라이브러리, 텍스트 편집기, 컴파일러 등 다양한 소프트웨어 도구 및 리소스에 의존하게 됩니다. 3. 도구를 필요한 상황에 따라 개별적으로 가져와 사용을 하게된다면, 많은 시간과 후에 일어날 상황에 대해서도 대비를 해야합니다. 4. 통합 개발 환경 IDE는 이러한 많은 도구를 공통 개발자 도구와 리소스를 통합하고, 개발자가 단일 그래픽 사용자 인터페이스(GUI)를 통해 액세스할 수 있습니다. 개발자는 IDE를 사용함으로써, 보다 세분화된 작업을 수행할 수 있게 됩니다. 일반적인 도구로는 다음과 같..
컴파일 순서 전처리기(.h) -> 컴파일(.cpp) 결과로 오브젝트 파일 생성 -> 링커 lnk파일 -> obj 합처져서 -> exe 파일 -> 컴퓨터 구조 ssd에 저장 지역변수 : Stack 영역 전역변수 : Data 영역 동적변수 : Heap 영역 메모리 구조, 지역변수 - 스택, 동적할당 변수 - 힙에 각각 할당하는 이유 Stack 영역 : 지역변수가 저장하는 이유, 스택은 함수가 호출될때 스택프레임이 만들어지는데 1메가(1023 byte)정도를 가지고있다 데이터를 쌓아가는 구조 함수가 호출될때 처음에 처음 호출된 곳 주소를 넣고 넘길 파라미터를 넣고 넘어갈 주소를 넣는다. 함수호출이 되면 넘어갈 주소를 꺼낸다. 안쪽에 함수들 안에있는 지역변수들을 다시 담고 연산이 끝나면 소멸을 시작해야 하므로 ..
3D 다룰때 분리축은 "평면"을 말하는 것이다. A와 B 오브젝트가 존재한다면 A 오브젝트의 평면 총 3개, B 오브젝트의 평면 총 3개 A 오브젝트의 좌표축(대각), B 오브젝트의 좌표축 각 각 외적한 경우의 수 9개 총 합 : 15개 분리축 : 두 다면체를 어떤 축에 투영시켰을때 구간이 서로 겹치지 않을 경우, 분리축이라 말한다. OBB가 충돌했는지 판단하는 기준은 15개의 분리축을 검사해야한다. 다면체 사이에 분리축이 하나라도 존재한다면 두 다면체는 서로 겹치지 않은 상태로 본다. 또 한 겹치지 않았다는 것은 두 다면체 사이에 하나는 평행한 분리축을 가지고 있다. 3D에서는 각 각 변들을 외적해야 OBB충돌검사를 할 수 있다. - OBB는 깊게 들어가서 정리해야 할 거 같다. 지금 내가 다루기에는 ..
불연속 그래픽 카드의 GPU와 같은 데이터 병렬 하드웨어를 활용하여 C++ 코드 실행을 가속화시킨다. AMP를 사용하면 이종 하드웨어에서 병렬 처리 방법을 사용하여 실행을 가속화 할 수 있도록 다차원 데이터 알고리즘을 코딩할 수 있게 만들어 줍니다. 일반적인 C++로 코드를 출력한다면 위에 보이는 결과가 나오게된다. 이는 CPU로 계산한 결과값이기도 합니다. 하지만 여기서 AMP를 사용하여 GPU가 연산을 하게 된다면 어떤 방법으로 코드를 작성하게 되는지 살펴보겠습니다. C++ APM으로 구현한 코드인데 값이 정확히 나오지 않아 나중에 깊게 파봐야겠다. 아직까진 쓰는 방식에 대해서만 다뤄야겠다. 1. C++에서는 메모리는 CPU가 접근할 수 있는 메모리이다. 2. GPU로 처리하기 위해서는 직접적으로 접..
다른 정렬 알고리즘과 다르게 비교를 줄여나가면서 진행되는 분할정복 알고리즘이다. 기본적인 틀은 아주 간단하다. 특정한 기준을 잡고 그것을 Pivot 이라고 부른다. pivot을 기준으로 pivot보다 작으면 왼쪽으로 이동하고, 크다면 오른쪽으로 이동하는 동작을 하게 된다. 이러한 배열이 만약 있다고 가정하고 돌아가는 원리를 설명해 보겠다. arr[9]라는 배열을 하나 선언하고 그 Index값에 숫자를 넣었다. 표시해놓은 숫자 "7"(pivot)을 기준으로 arr[0]을 시작부터 비교를 하기 시작한다. 0번인 4와 7를 비교 했을때 만일 좌항이 pivot 보다 작다면 그대로 유지 시키고, 하나씩 비교를 해나아간다. 그리고 arr[3]을 가리키는 9의 값까지 도달했을시 pivot인 7이 더 작으므로 9과 7..
ECA규칙 E(enent) -> C(condition) -> A(action) 트리거를 명시하려면 트리거를 활성화시키는 사건인 이벤트, 트리거가 활성화되었을때 수행되는 조건이 활성화되고 그 조건이 참이라면 수행되는 문(프로시저)인 동작을 표현해야 한다. 데이터베이스 트리거는 테이블에 대해 삽입, 수정, 삭제 등 이벤트가 발생하면 자동으로 실행하는 작업을 의미한다. 연쇄적인 반응이 일어나는 거라고 생각하면 편하다. 트리거가 적용됨으로써 편리함이 작용한다. - 만일 수십만건에 데이터가 한번에 실시간으로 들어온다면 프로그램은 누군가 그 수량과 품목등을 조회할때마다 수십만건의 데이터를 읽고 계산을 해야합니다. 그렇게 되면 시스템 자체 퍼포먼스도 떨어지며 효율을 잃게 된다. 장점 1. 데이터 무결성 강화(참조 무..
C는 절차지향형 프로그램이기도 하지만 함수지향 프로그래밍이다. 위에서 아래로 내려온다는 설명은 맞지만 사실 C++도 위에서 아래로 내려오는 구조이다. 설명이 너무 단순하게 설명되어 구조를 보는데있어 혼란이 올 수도 있다. 기능단위 프로그래밍을 시작으로 발전하던 도중 데이터가 방대하게 쌓이기 시작하면서 한계점을 느끼기 시작했다. 이를 방지하고자 "Class"가 탄생하고 객체지향 프로그래밍이 나오게 되었다. 하지만 객체지향도 단점이 있었다. 그게 "상속"이였다 상속이 많아지니 관리가 힘들어지게 되니 결국 기능만을 모아놓은 "CBD"방법이 나오게 되고. CBD는 추가 기능을 제공해준다. 애자일 (Agile) 방법론 1. 소프트웨어는 유동적이고 개방적인 특징을 띄고 있으며, 요구사항이 많아지고 변칙적일수록 그 ..