C++
[C++ 11] 복사 생략(Copy Elision)
[C++ 11] 복사 생략(Copy Elision) 컴파일러가 복사 또는 이동 연산자를 회피 할 수 있으면 회피하는 것을 허용하는 방식 Return Value Optimization / Named Return Value Optimization (예시) struct Foo { Foo() { std::cout Release로 빌드하는 이유) Foo nrvo_foo = NRVO_F(); } Named Return Value Optimization (NRVO) NRVO는 RVO에 속하는 종류로써 예전에는 이러한 NRVO_F 라는 함수 내부에 foo라는 이름을 가진 객체는 return 시켜도 최적화 시키지 않았다. 그러나 사람들이 이름을 가지더라도 최적화 시키자고 하였고 이를 NRVO(Named Return Va..
[C++] C++ 언어의 특징
[1] C++ 언어의 주요한 설계 목표 C++ 언어의 기본적인 설계 목표에 대해 알아보자. C 언어로 작성된 프로그램과의 호환성(compatability)을 유지한다. 기존에 작성된 C 프로그램을 그대로 사용할 수 있도록 C 언어의 문법적 체계를 그대로 계승한다. 또한 C 언어로 작성되어 컴파일된 목적 파일(object file)이나 라이브러리(library)를 C++ 프로그램에서 링크하여 사용할 수 있도록 한다. 소프트웨어의 재사용을 통해 소프트웨어 생산성을 높이고, 복잡하고 큰 규모의 소프트웨어 작성, 관리, 유지 보수를 쉽게 하기 위해 데이터 캡슐화, 상속, 다형성등 객체 지향 개념을 도입한다. 타입 체크를 엄격히 하여 실행 시간 오류의 가능성을 줄이고 디버깅을 돕는다. 실행 시간의 효율성 저하를 ..
[DirectX 11] 자체 포맷 개발
개발 일자 : 2022년 2월 21일 ~ 25일 우리 팀 아트가 블렌더로 작업한 파일을 FBX파일로 익스포트하여 자체 엔진에서 임포트, 파싱하여 사용하고 있는데 문제점이 있었습니다. 첫 번째로 속도입니다. FBX파일을 임포트하고 FBX 파서에서 Triangulate 함수로 씬 내의 모든 노드를 삼각형화하는데, 이 과정에서 많은 시간이 소요됩니다. 또 FBX 익스포트 시에 특정 옵션을 주지 않는 이상 노말맵을 위한 탄젠트 스페이스를 임포트 과정 중에 구해야하는데, 이 역시 시간이 소요됩니다. 두 번째로 보안성입니다. 게임을 배포할 때 우리 팀 아트가 작업한 모델을 FBX로 익스포트해 그대로 사용한다면 이 FBX파일을 내 엔진 이외에 다른 엔진에서도 그대로 사용이 가능할 것입니다. 위의 두 가지 이유로, ..
[C/C++] #include 시에 < > , " " 의 차이점
옛날에 찾아봤었는데 기억이 안나서 다시 찾아봤다. 자세한 내용은 C standard, 6.10.2 섹션에 2 ~ 4까지에 나와있다. [1] #include 는 컴파일러가 미리 정해놓은 위치 A에서 헤더를 찾는다. (파일이 아닐 수 있다.) [2] #include " "는 컴파일러가 미리 정해놓은 위치 B에서 파일을 찾는다. 만약 파일을 찾지 못하면, " "를 로 바꿔 [1]을 진행한다. ( [2]가 [1]보다 범위가 넓다. ) A는 보통 /usr/include/ 같은 위치이고 B는 소스파일이 있는 위치이다. 위와 같은 이유로 https://gcc.gnu.org/onlinedocs/cpp/Include-Syntax.html 에 따르면 #include 는 시스템 헤더를 include 하는 데..
[C++] 스마트 포인터 참고할만한 글
스마트 포인터에 대해 공부하면서 참고했던 글이다. 스마트 포인터 개념에 대해 궁금한 경우 : http://www.tcpschool.com/cpp/cpp_template_smartPointer 코딩교육 티씨피스쿨 4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등 tcpschool.com 좀 더 심화적인 개념을 알고싶은 경우 : https://object-world.tistory.com/8 1. std::unique_ptr C++ 메모리 관리 C++에서 생 포인터(raw pointer)를 관리하기는 쉽지 않다. 자바는 가비지 콜렉터가 이를 수행하지만 C++같은 경우 사용자가 직접 메모리를 관리해야 한다. 잘못된 메모리 관리는 메모 object-world.tistory..