C&C++(19)
-
C/C++ 시간을 측정하기
기준 시점 단위 해상도 clock 프로세스 실행 ms 1ms C (time.h) GetTickCount 시스템 시작 이후 ms 15.6ms WinAPI GetTickCount64 시스템 시작 이후 ms 15.6ms WinAPI timeGetTime 시스템 시작 이후 ms 타이머 인터럽트 정확도 WinAPI QueryPerformanceCounter 타임스탬프 카운트 관련 100ns 1㎲ 이하 WinAPI chrono ? ns까지 가능 1㎲ 이하 C++ 11 (chrono) GetTickCount GetTickCount64 는 반환값이 32비트냐, 64비트냐의 차이이다. 32비트를 ms 단위로 return하는 GetTickCount의 경우 시스템 시작 이후 49일 정도 지나면 값이 오버플로우되면서 초기화된..
2022.01.06 -
랜덤을 구현하는 방법
좋은 랜덤이란 : 확률이 균등하게 나오는 것 다음 랜덤값을 예측하기 힘든 것 1. rand, srand 함수를 통해 구현한다. 성능이 좋지만, 확률이 균등하게 나오지 않을 가능성(RAND_MAX와 나머지 연산을 했을 때) ->이를 보완한 C++의 random 라이브러리. 좋은 랜덤을 제공하지만 성능이 떨어지는 단점이 있음. 2. 랜덤함수 + 일부분을 테이블에 패턴을 미리 정의하는 방법 (몇번째에 어떤 것이 나온다) 나올 것이 계획한대로 꼭 나오는 장점 사실상 조작한 랜덤이기 때문에 진정한 랜덤은 아니라는 단점 3. 2번의 알고리즘의 테이블을 셔플 알고리즘으로 섞는 방법 4. 랜덤 함수를 할 때마다 해당 요소의 개수를 줄이는 방법 3,4번 둘다 덜 조작한 것이긴 하지만, 이것도 진정한 랜덤은 아니라는 단점
2021.11.07 -
#pragma once
비쥬얼스튜디오에서 헤더파일을 생성하면 다음과 같이 생성된다. #pragma once 이 코드는 두개이상의 cpp파일에서 해당 헤더파일을 include 했을 때, 이 헤더가 중복되게 include 되지 않게 해주는 역할을 한다. 표준은 아니지만 거의 모든 컴파일러에서 작동한다고하니, 거의 모든 상황에서 써도 무방할 듯 하다. (표준을 꼭 써야하는 상황을 제외하고..) 예전에는 아래와 같은 방식으로 이를 구현했다고 한다. #ifndef _HEADER_ #define _HEADER_ //C //O //D //E #endif 개인적으로 예전에 유니티에서 싱글톤을 쓰던 느낌이랑 비슷한 것 같다.
2021.10.25 -
enum class
C++11에서 기존 enum의 문제점들을 개선한 enum class가 추가되었다. 기존 enum과 다른 점은, 1. 기존 enum의 요소들의 전역적인 특징이 사라졌다. enum class의 요소들은 enum class 안에서만 유효하다. 이로 인해서 enum class의 요소 이름을 다른 enum class나 외부에서 사용할 수 있게 되었다. 2. int 등으로의 자동 형변환이 안된다. 기본자료형처럼 쓰고싶다면 명시적으로 형변환을 해주어야한다. #include enum class State { idle, attack, hurt }; //같은 멤버 OK enum class EnemyState { idle, attack, hurt }; int main(void) { int idle = 100; State s..
2021.10.25 -
프로그래밍 팁
1. 일반 변수 선언 시 필요한 경우에만 초기화를 하자. (불필요한 mov를 일으키기 때문) 2. 변수 선언 시 한 줄에 동시에 여러 변수를 선언하지 말자. 무조건 한 줄에 변수 하나 선언. 3. 조건문 및 블록 내부에서 되도록 변수 선언을 하지 말자. 어차피 함수 블럭 들어오면 해당 조건문 충족과 상관없이 크기가 할당된다. 디버깅 시 조건식 활용에 있어서 블록 외부에서 선언하는게 용이함. 4. 부동소수와 정수를 절대 비교하지 않는다. 5. 가급적 goto 대신 do~while(0) , break로 처리한다. 6. continue는 예외적인 상황에 사용한다. 7. 함수 인자중 값을 바꾸지 않을 것은 const로 선언한다. 8. 배열(table)을 통해 반복되는 분기문을 없앨 수 있다. (메모리 - 성능 ..
2021.10.19 -
C언어 volatile
변수 선언시 앞에 volatile을 붙이면, 해당 변수를 사용할 때 컴파일러가 최적화를 하지 않는다. void A() { volatile int a = 5; while(a
2021.10.19