2024/12 22

인라인 함수

함수를 호출할 때 필요 조건함수는 메모리 안에 "할당"되어 있다.함수를 호출하기 위해 필요한 단계들변수들을 스택에 push함수 주소로 점프함수를 실행호출자 함수로 다시 점프1번 단계에서 넣어뒀던 변수들을 "pop"함수 주소로 이동되서 써야하니까 변수를 스택에 넣어두고스택에서 가리키는 포인터를 확 뒤돌리는 것 만으로도충분히 그 값을 쓸 수 있다.하나하나 빼서 쓰지는 않다. 여기서 실제 컴퓨터 아키텍처에 따라4,5번은 순서가 뒤바뀔 수 있다. 함수의 단점뭔가 여러 단계를 거치므로 생기는 단점이 있을 것 같지 않은가? 여러 단계를 거치다보니 좀 더 느리다는 단점있다.CPU 캐시에 최적이 아닐 수도 있으면 더 느리다.모던 cpu 아키텍처에서는 더 느리다. 특히나 캐시 최적화나 이런 점 때문에 느린 속도를 가진다..

그래프 순회 - BFS

그래프 구조를 이용해 문제를 해결하기 위해필요한 기본적이고 대표적인 그래프 알고리즘에서BFS,DFS를 빼놓고 논하기는 쉽지 않을 것이다.일단, 그래프 알고리즘을 말하기 전에 그래프에 대해서 말해보자. 그래프란? 그래프는 정점의 집합과 정점들을 서로 잇는 에지의 집합으로 구성된다.수학적으로 표현하면 그래프 G = 형태로 표현하고,여기서 V는 정점의 집합, E는 에지의 집합을 나타낸다. 그래프에는 크게 방향 그래프, 무방향 그래프, 가중 그래프, 비가중 그래프가 있다. 만약 에지가 특정 정점에서 다른 정점으로 향하는 방향있다면 방향 그래프라고 한다.특정 방향을 가리키지 않으면 무방향 그래프라고 한다.에지에 가중치가 있으면 가중 그래프,가중치가 없으면 비가중 그래프라고 한다. (추가적으로 그래프를 다룰 때 ..

DFS 구현 (재귀와 스택) 과 BFS(큐)

DFS 구현 재귀 호출 코드#include #include using namespace std;const int MAX_N = 10;int N, E;int Graph[MAX_N][MAX_N];bool Visited[MAX_N];void dfs(int node) { Visited[node] = true; cout > N >> E; // 배열 초기화 memset(Visited, 0, sizeof(Visited)); memset(Graph, 0, sizeof(Graph)); for (int i = 0; i > u >> v; Graph[u][v] = Graph[v][u] = 1; } dfs(0); return 0;}  스택 코드#include #include #include using namespace st..

백준 실버4 1920 수 찾기

https://www.acmicpc.net/problem/1920  이 문제는 다음과 같이 풀 수 있다.1. 배열의 길이를 입력 받는다.2. 해당 배열에 들어갈 원소들을 순차적으로 입력 받는다3. 비교할 배열의 길이를 입력 받는다   (굳이 배열에 담지 아니해도 된다, 설명 편의상 배열이라고 가정하였다.)4. 먼저 생성된 배열과 비교할 배열의 원소와 일치한다면 1을, 아니라면 0을 출력한다. 해당은 문제는 탐색을 통해 풀 수 있다.필자는 이진 탐색으로 풀었다.using namespace std;int main(void){ ios::sync_with_stdio(false); cin.tie(NULL); std::cout.tie(NULL); int n; cin >> n; vec..

프로그래머스 LV.2 전화번호 목록

https://school.programmers.co.kr/learn/courses/30/lessons/42577 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 해당 문제는 전화번호가 접두어인가? 를 판별하면 된다.접두어이면 FASLE, 아니면 TRUE를 반환한다. 제한 사항폰북의 길이가 1 ~ 1000000이다.각 전화번호의 길이는 1 ~ 20 사이이다.같은 전화번호는 중복해서 들어가 있지 않다 해당 문제의 접근법은 3가지가 있다. 1. 반복문을 활용 - 시간이 너무 오래 걸린다. 폰북의 길이가 너무 길다. - 이중 루프를 돌게된다.(양방향 비교) 2. 정렬과 반복문을 활용 - 이중 루프..

Unreal Object Handling

언리얼 오브젝트 핸들링이란? UObject 시스템의 기능에 대한 개요로,클래스, 프로퍼티, 함수에 적합한 매크로로 마킹해주면,UClass, UProperty, UFunction 으로 변한다.그러면 언리얼 엔진이 접근할 수 있어,다수의 내부적인 처리 기능을 구현할 수 있다. 자동 프로퍼티 초기화 UObject는 생성자 호출 전 초기화시 자동으로 0으로 채워진다.이러한 초기화 과정은1) 전체 클래스, 2) UProperties(GC시스템에 의해 관리되는 변수들), 3) 네이티브 멤버(C++로 선언된 일반 멤버 변수)모두를 포함한다. 이후 생성자에서 원하는 값으로 초기화할 수 있다. 즉, 이 말은자동 초기화 후에, 생성자에서 커스텀 초기화가 가능하다는 뜻이다.자동 추기화는 앞서 말했듯이UObject가 생성될 ..

UE5 2024.12.19

Windows Internals vol.1 - 프로세스 정리

.NET 프레임워크는 다음과 같은 두 개의 주요 컴포넌트로 이뤄져 있다.- 공통 언어 런타임(Common Language Runtime) 이것은 .NET을 위한 런타임 엔진이며, 공통 중간 언어(Common Intermediate Language) 명령을하부의 하드웨어 CPU 머신 언어와 가비지 컬렉터, 유형 검사, 코드 접근 보안 등의 명령으로 변환하는 JIT(just-in-time)컴파일러를 포함한다.CLR은 COM 인프로세스 서버(DLL)로 구현돼 있으며, 윈도우 API가 제공하는 다양한 기능을 사용한다.- .NET 프레임워크 클래스 라이브러리(Framework Class Library)사용자 인터페이스 서비스와 네트워킹, 데이터베이스 접근 등과 같은 클라이언트와 서버 애플리케이션이 전형적으로 필요..

윈도우 인스톨러

윈도우 인스톨러윈도우 인스톨러란, 윈도우의 소프트웨어 설치, 유지, 제거를 위한 엔진이다.이전에는 마이크로소프트 인스톨러라고 불렀다.설치 정보는 설치 꾸러미 안에 저장되며,기보노 파일 확장자 MSI 파일로도 알려져 있다.마이크로소프트는 서드 파티 제품들이 원도우 인스톨러를 기본 설치 프레임워크로 사용을 돕고 있다.롤백(되돌리기)과 버저닝(DLL hell = 윈도우 기반 프로그램에서 DLL을 사용할 경우 발생할 수 있는 복잡성을 나타내는 말이다.)과 같은중요한 기능은 실제 동작을 위한 일정한 내부 데이터베이스에 따라 달라질 수 있다.Windows Installer를 사용할 위치Windows Installer를 사용하면 Windows에서 실행되는 제품 및 애플리케이션을 효율적으로 설치하고 구성할 수 있다.설..

D3D11 애파인 변환(=아핀 변환)

이동은 선형변환이 아니다.하지만 그래픽스에서 이동과 선형 변환을 동시에표현하고 싶을 때 사용하는 것이 애파인 변환이다. 즉, 애파인 변환이란선형 변환과 이동을 하나의 행렬로 표현한 것이다. Homogeneous Coordinates란?선형 변환하고 선형 변환이 아닌 이동을 합치기 위해서 새롭게 추가가 된 개념이다.벡터 : (x,y,z,0) 포인트 : (x,y,z,1)포인트 - 포인트 = 벡터포인트 + 벡터 = 포인트변환 전 직선은 변환 후에도 직선이다.이 식을 행렬 식으로 표현하면 다음과 같다.이러한 개념을 수학적으로 간단히 나타내면 애파인의 a를 따고,선형변환을 Tau라고 했다. 애파인 변환을 식으로 나타내면 다음과 같다.이런 식으로 애파인 트랜스폼을 사용할 수 있으므로,3차원에서는 4x4 행렬을 사용..

그래픽스/DX11 2024.12.16