자습

자습

실험실) ||(OR 연산자)의 결합 방향과 특징

|| 연산자(OR)의 특징은 논리검사 대상 중 하나라도 true가 반환될 경우 true를 반환한다. 그리고 || 연산자의 결합 방향은 →(오른쪽) 방향이다. 그렇다면 아마 C++에서는 최적화를 위해서 왼쪽 파트의 논리 검사에서 true가 반환된다면 오른쪽 파트는 검사를 스킵하지 않을까? 라는 의문이 들었다. 바로 실험해보자 #include #include int main() { std::vector vecIntPtr; vecIntPtr[0] = 1; return 0; } 우선 위의 코드를 실행 시키면 vecIntPtr에는 원소가 하나도 추가되지 않았으므로 0번 인덱스를 강제로 참조하게 되면 아래와 같은 에러가 발생한다. 또한 std::vector의 empty() 함수는 생성한 벡터 컨테이너가 비어있을 경..

자습

실험실)typeid(T).name() vs typeid(T).hash_code()

name()이 걱정되는 점 : T에서 타입명을 추론하고 이를 문자열로 변환하는 과정이 오래걸릴 거 같음 hash_code()가 걱정되는 점: T를 해쉬코드로 변경하는 알고리즘이 복잡할 것 같음 #include #include #include "Timer.h" int main() { CTimer Timer; float T = 0.f; Timer.StartTimer(); for (int a = 0; a < 100000; ++a) { std::string mystr = typeid(int).name(); mystr = typeid(float).name(); mystr = typeid(CTimer).name(); mystr = typeid(char).name(); mystr = typeid(DWORD).name..

자습

제목토글 테스트

제목토글1 테스트제목토글안의리스트123 제목토글2 테스트제목토글안의토글123 제목토글3 테스트제목토글가나다라 Uploaded by N2T

자습

220714_2_DX Device Initialize 1

> EngineInfo.h에 SAFE_RELEASE 매크로 추가#defineSAFE_RELEASE(p)if(p){ p->Release(); p = nullptr; } > 그래픽카드 드라이버와 DirectX드라이버는 그래픽카드(하드웨어)에 명령을 내리고 처리하기 위한 소프트웨어이다.그런데, 제조사 별로 이 명령을 내리는 과정이 조금씩 다를 것이다. ex)엔비디아, 라데온그렇다고 프로그램 개발자가 그래픽카드별로 다르게 코딩을 하게 되면 너무 불편해지므로 DirectX가 만들어진 것.윈도우 프로그램에서 DirectX에 그래픽 관련 명령을 전달하면, DirectX는 그래픽카드 드라이버에 맞는 명령어를 전달해 주는 역할을 해준다.일종의 완충 지대 역할을 하는 것이다.> EngineInfo.h에서 필요한 헤더들 포..

자습

220714_1_기본 틀 작업 2

공용 헤더폴더 자동으로 포함시키기지난 시간에 빌드 후에 자동으로 프로그램을 복사해주는 기능까지 구현했었다.이제 이 자동 복사된 파일들을 다른 프로젝트에서 자동으로 포함(include) 시키는 기능을 구현해야 하는데, 비주얼 스튜디오에 이 기능이 이미 있다.Client2D 프로젝트에서 자동으로 AR41Engine 프로젝트의 라이브러리 파일과 헤더 파일이 포함되도록 설정해 준다.> 포함 디렉터리 지정→ 이 기능을 사용할 프로젝트→속성→VC++ 디렉터리로 들어가서 ‘포함 디렉터리’에 프로젝트에서 공용 헤더파일을 옮겨놓는 폴더인 ../../Engine/Include/ 폴더를 지정해 준다.** 프로젝트 파일(.vcsproj) 파일이 있는 디렉터리를 기준으로 한 상대 경로로 지정해주면 된다. > 라이브러리 디렉터리..

자습

220713_기본 틀 작업, .bat파일 자동화

> 오늘의 목표: 솔루션 내에서 각각 다른 기능을 하는 3개의 프로젝트를 생성하고, 연결시킨다.새로 배운 지식들💡컴퓨터 메모리의 구성스택: 지역변수데이터 영역: 전역 변수 혹은 정적변수힙: 동적할당코드: 함수 등 우리가 작성한 코드가 올라가는 영역 💡정적 라이브러리정적 라이브러리는 아예 프로그램에 라이브러리의 코드를 포함시킨다(바이너리 코드 형태)→ 그래서 exe 파일이 만들어지면 라이브러리 파일은 필요하지 않다.정적 라이브러리 내부의 바이너리 코드를 사용하기 위해서는, 라이브러리를 포함시킨 프로그램 안에서 정적 라이브러리의 코드들에 대한 선언 파일(헤더 파일)을 반드시 가지고 있어야 한다. > 가장 먼저 3개의 솔루션 폴더를 만들어 준다. 01. Client, 02. Engine, 03..

자습

12345678

sdafasdf Uploaded by N2T

자습

TIPS

Uploaded by N2T

자습

삼항 연산자 주의점

bool Check1 (int a, int b, int c, int d) { return (a

자습

고속 역 제곱근 vs math 제곱근

https://ko.wikipedia.org/wiki/%EA%B3%A0%EC%86%8D_%EC%97%AD_%EC%A0%9C%EA%B3%B1%EA%B7%BC 고속 역 제곱근 - 위키백과, 우리 모두의 백과사전 고속 역 제곱근(高速逆-根, fast inverse square root)은 때때로 Fast InvSqrt()나 16진수 0x5f3759df라고도 하는, IEEE 754 부동소수점 체계의 32비트 실수에 대한 제곱근의 역수를 계산하기 위한 알고리즘이다. ko.wikipedia.org - 고속 역제곱근을 통한 제곱근 연산 1000만회 vs math.h의 sqrtf 1000만회 -> 10회 반복 #include #include #include #include #include #inclu..

자습

std::list의 begin()과 end()

https://blog.daum.net/darkprisoner/123 [C++] stl list의 end() list 자료구조의 end() 함수는 그 리스트의 마지막 지점을 의미한다. 그런데 마지막 부분을 기록하기 위해 특정 메모리를 할당받은 것이 아닌 0xcdcdcdcd (Visual studio 기준) 값을 리턴한다. 좀 더 정확 blog.daum.net - 요약 -- list는 head로 시작해서 head로 끝나는 순환 구조이다. --- begin()은 head의 바로 다음 노드를 반환한다. --- end()는 head 노드를 반환한다. - 궁금증 -- List의 중간 값을 하나 지우거나, 중간 구간을 지우거나, clear() 해버리면 end() 반환값이 달라질까? 결론: 안바뀜 실험 코드

자습

Notify 최적화 테스트

- 2D 게임의 애니메이션에서 특정 프레임에 실행될 노티파이를 실행시키는 방법은 두가지 -1. 애니메이션의 프레임 수와 일치하는 Notify 배열을 만들어서 n번 애니메이션 프레임이 재생될 때 Notify 배열의 n번 인덱스에 들어가서 등록된 Notify가 있는지 확인하고 실행 -- 공간을 좀 더 잡아먹는 대신 좀더 효율적이라고 예상 -2. Notify 구조체에 함수 포인터와 실행될 Frame을 등록해 놓고 생성될 때마다 배열에 pushback 해놓은 뒤 한 프레임 프레임 당 Notify가 모여있는 배열을 모조리 순회 돌면서 저장된 Frame 번호와 현재 재생되고 있는 Frame 번호가 일치하는지 확인하고 실행 -- 공간을 덜 잡아먹는 대신 좀 더 비효율적이라고 예상 - 둘 중 어떤게 빠른지 실험해보기 ..

hyrule
'자습' 카테고리의 글 목록