비트 시프트 연산 사용: 양의 정수를 2의 거듭제곱으로 나눌 때, 비트 시프트 연산을 사용하여 최적화할 수 있습니다. 예를 들어, x >> 2는 x / 4와 동일한 결과를 얻지만 연산이 빠릅니다. int x = 16; int result = x >> 2; // 비트 시프트를 사용한 나눗셈 최적화 상수 분모 최적화: 분모가 상수인 경우, 컴파일러는 이를 상수 폴딩을 통해 최적화합니다. 예를 들어, x / 5는 컴파일러에 의해 x * 0.2로 최적화될 수 있습니다. int x = 100; int result = x / 5; // 컴파일러가 상수 폴딩을 수행하여 최적화 계산 순서 변경: 경우에 따라 나눗셈을 피하기 위해 계산 순서를 변경할 수 있습니다. 예를 들어, x / 3 대신 x * (1.0 / 3)과 ..
이름 공간(namespace) 어떤 정의된 객체에 대해 어디 소속인지 지정해주는 것과 동일합니다. 코드의 크기가 늘어남에 따라, 혹은 다른 사람들이 쓴 코드를 가져다 쓰는 경우가 많아지면서 중복된 이름을 가진 함수들이 많아졌다. 따라서 C++ 에서는 이를 구분하기 위해, 같은 이름이라도, 소속된 이름 공간이 다르면 다른 것으로 취급하게 되었다. C++ 표준 라이브러리는 매우 매우 거대하다. → 따라서 권장하는 방식은 using name space; 같은 것은 사용하지 않고 std:: 를 직접 앞에 붙여서 std 의 이름공간의 함수이다 라고 명시해주는 것이 좋다. 이름 없는 이름 공간 static 처럼 사용할 수 있다.
스택 프레임(stack frame) 메모리의 스택(stack) 영역은 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역입니다. 스택 영역은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸합니다. 함수가 호출되면 스택에는 함수의 매개변수, 호출이 끝난 뒤 돌아갈 반환 주소값, 함수에서 선언된 지역 변수 등이 저장됩니다. 이렇게 스택 영역에 차례대로 저장되는 함수의 호출 정보를 스택 프레임(stack frame)이라고 합니다. 이러한 스택 프레임 덕분에 함수의 호출이 모두 끝난 뒤에, 해당 함수가 호출되기 이전 상태로 되돌아갈 수 있습니다. 스택 프레임의 동작 방식 예제 int main(void) { func1(); // func1() 호출 return 0; } void func1() ..
1. 바인딩(Binding)이란? 프로그램 소스에 쓰인 각종 내부 요소, 이름 식별자들에 대해 값 또는 속성을 확정한 과정을 바인딩이라고 한다. 2. 정적 바인딩(Static Binding)이란? 바인딩의 정의에서 보는 바와 같이 바인딩 과정이 컴파일 시점에 이루어지는 바인딩을 정적 바인딩이라고 한다. 아래의 예제 소스는 int라는 타입을 갖고, a라는 이름의 변수명으로 선언이 되어 있다. 이처럼 소스상에 명시적으로 타입과, 그 타입의 변수명을 선언하는 것을 정적 바인딩(Static binding)이라고 한다. int main() { int a = 0; } 1) 장점 (1) 컴파일시 타입에 대한 정보가 결정되기 때문에 속도가 빠르다. (2) 타입 에러로 인한 문제를 조기에 발전할수 있어서 안정적이다. ..
Memory 영역 (Stack vs Heap) 컴퓨터에서 메모리 영역은 아래와 같이 나뉘어있다. Code : 실행한 프로그램의 코드가 저장됨 Data : 전역변수와 static변수가 저장되며 프로그램 종료 시까지 사라지지 않고 남아있음 Heap : 동적으로 할당된 메모리영역이며 프로그래머에 의해 할당( C++ : new, C : malloc ) 및 해제( C++ : delete, C : free )됨 Stack : 지역변수와 매개변수가 할당되고 함수를 빠져나가면 자동 소멸됨 정적 메모리 할당 vs 동적 메모리 할당 프로그래밍 관점에서 메모리 영역에는 크게 stack과 heap 메모리 공간이 있다. 정적으로 메모리를 할당하면 컴파일 시 stack 영역에 할당되며, 함수를 빠져나갈 때 소멸된다. 프로그램 컴..
Visual Studio, MSVC 에서만 테스트되었고, 일단 비표준이다. 회사에 새로 오신분께서 내가 보기엔 정말 괜찮은 정리 규칙을 정해주셔서, 써두고 추후 내 입맛에 맞게 더 발전시켜 보려한다. 핵심은 region 키워드인데, 함수와 변수를 카테고리처럼 나누고, public, protected, private으로 정리하는 것이다. 예를 들면 아래와 같다. #pragma region Attack public: bool CanAttack(); protected: bool DoLineTrace(); private: int32 AttackCount(); public: bool bIsAttackMatched; protected: int32 CurrentBullet; private: bool bProjecti..