2024/12 23

인라인 함수

함수를 호출할 때 필요 조건함수는 메모리 안에 "할당"되어 있다.함수를 호출하기 위해 필요한 단계들변수들을 스택에 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. 정렬과 반복문을 활용 - 이중 루프..

2025년을 일주일정도 앞두고

25년에는 언리얼 기본기부터 다시 쌓자.구조부터 기본기 전부 다시 천천히 꼼꼼히 훑어보자.25년에는 적어도 언리얼에 대한 기본기는 탄탄하게 가져가자언리얼 공부는 타 상용엔진 이해에도 도움이 될 뿐만 아니라,간접적으로 아키텍처 공부도 된다.따라서 언리얼에 대한 기본기를 잘 숙지하는 것은굉장한 이점이 된다.이를 위한 지식 함양을 고려하여25년 공부 우선 순위를 정하였다.1. C++ (+자료구조)2. 네트워크3. 그래픽스4. 언리얼5. OSCS6. 중국어 영어 자격증 취득7. CUDA8. 아키텍처1. C++ 목표effective C++effective modern C++ㅡ전문가를 위한 C++2. 네트워크혼자 공부하는 네트워크열혈 TCP/IP 3. 그래픽스홍랩 그래픽스 강의 2~4PART4. UE언리얼 기본기 ..

카테고리 없음 2024.12.24

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에서 실행되는 제품 및 애플리케이션을 효율적으로 설치하고 구성할 수 있다.설..