전체 글 474

구조체 바이트 패딩 규칙

단순 클라이언트의 작업만을 생각했을 땐 구조체 혹은 클래스의 순서를 중요하게 생각하지 않았었다. 하지만 서버에서는 구조체, 클래스의 패딩 규칙이 중요하다 이에 따라서 구조체 전체 크기가 달라지기도 하기 때문이다. 구조체를 이용하여 새로운 자료형을 정의하여 사용할 때, 정의된 자료형은 컴파일러에 의해 데이터로 변환되고, 이어서 메모리에 저장된다. 컴퓨터 프로세서가 메모리에 '어떤 방식'으로 접근하여 데이터를 읽어가고 컴파일러가 프로그램 코드를 '어떤 규칙'으로 데이터로 변환하는지를 확인하여 보자 이를 통해, 처리속도가 빠르고 효율적으로 메모리를 사용하는 자료형을 구성할 수 있을 것이다. 1. 빈 구조체 혹은 클래스는 4바이트의 메모리 공간을 차지하게 된다. 2. 먼저 나열한 순서 대로 메모리 공간을 순차적..

const int *, const int* const, int* const

int const * int const * 는 const int 형을 가리키는 포인터로 포인터 값은 변경(주소 변경)이 가능하므로 다른 것을 가리킬 수 있으나 내부의 int 값은 const로 선언되어 변경이 불가능하다. int* const int* const 는 const 포인터가 int형을 가리키고 있으므로 포인터의 값(주소)은 변경이 불가능하고 내부의 int형으로 표현된 값은 변경이 가능하다. const int* const 는 가리키는 주소와 주소 내부의 값 모두 상수화 한 것이다.

코어와 멀티코어, 스레드와 멀티스레드

코어와 멀티코어 클럭 속도를 높이는 방법 외에 CPU의 성능을 높이는 방법으로 대표적인 해결책으로는 CPU의 코어와 스레드 수를 늘리는 방법이 있다. 전통적인 CPU에는 코어가 하나였지만, 오늘날에는 코어를 여러 개 포함하고 있는 CPU를 멀티코어 CPU 또는 멀티코어 프로세서라고 부른다. 이는 CPU 내에 명령어를 처리하는 일꾼이 여러 명 있는 것과 같다. 당연히 멀티코어의 처리 속도는 단일코어보다 빠르며, 가령 클럭 속도가 2.4GHz인 단일 코어 CPU와 클럭 속도가 1.9GHz인 멀티코어 CPU를 비교하면 일반적으로 후자의 성능이 더 좋다. CPU 종류는 CPU 안에 코어가 몇 개 포함되어 있는지에 따라 싱글코어, 듀얼코어, 트리플코어 드응로 나뉜다. 즉 멀티코어 프로세서란 여러 개의 코어를 포함..

프로그래밍 개발 과정

프로그래밍 언어 고수준 VS 저수준 (어셈, 기계어) 컴파일러 - 고수준 언어를 저수준 언어로 번역하는 프로그램이며 이 작업을 컴파일이라 한다. 인터프리터 - 고급언어로 작성된 코드를 한 단계 식 해석하여 실행 시키는 방법이다. 컴파일 언어 - 원시코드를 목적코드 (기계어) 로 변환하는 것 - 네이티브 코드란? 직접 기계어 번역 및 실행됨 중간 언어 - 원시 코드와 목적 코드의 중간 단꼐 언어 (원시 > 중간 > 목적) - Java 가상 머신, .Net PrameWork 등 - 런타임에 동적으로 기계어 번역이 실행된다. - 매니지드 코드 : 바이트 코드 번역 링커 - 컴파일러가 만들어낸 1개 이상의 목적코드들을 병합하여 단일 실행파일로 만들어 내는 프로그램이다. 라이브러리 - 다른 프로그램들과 링크되기 ..

컴퓨터 구조

컴퓨터 구조 1. CPU 2. 레지스터 3. 캐시 4. BUS 5. GPU 1. CPU 중앙처리 장치 (CPU : Central Processing Unit) 컴퓨터 시스템의 기능에는 입력, 출력, 기억, 연산, 제어의 5대 기능이 있다. 이 중에서 연산, 제어 및 기억 기능은 컴퓨터의 중심이 되는 기능이라고 볼 수 있는데 이러한 기능을 수행하는 장치로 컴퓨터의 두뇌로서의 역할을 수행한다고 볼 수 있기 때문에 중앙처리장치 즉, CPU라고 한다. 코어( 개수가 많을수록 여러 가지 작업을 동시에 수행할 수 있다.) 싱글 > 듀얼 > 쿼드 > 핵사 > 옥타 (8개) CPU는 기계어로 쓰인 컴퓨터 프로그램의 명령어를 해석하여 실행한다. CPU는 프로그램에 따라 외부에서 정보를 입력받아, 이를 기억하고, 연산하며..

다이나믹 캐스트

다이나믹 캐스트란? C++ 캐스팅 연산자에는 4가지 유형의 캐스트가 있다. 그 중의 하나인 다이나믹 캐스트는 교차 캐스트를 수행할 수도 있으며 이를 통해 동일한 클래스 계층 구조를 사용하기가 핵심이다. ++ 구글 C++ 가이드에 따르면 RTTI 항목에 보면 다이나믹 캐스트와 typeid 사용을 지양하고있다. 이는 클래스 구조를 잘못 짠 원인이며, 이를 고려하지 않은 구조가 유지 보수하기 더 수월하다는 의견이 있다. 그만큼 다이나믹 캐스트는 신중하게 사용해야 하나보다 했다. ++ 다이나믹 캐스팅을 말하기 전에, 캐스팅이란, C++언어에서는 클래스가 가상 함수를 포함하는 기본 클래스에서 파생되는 경우 해당 기본 클래스 형식에 대한 포인터를 사용하여 파생 클래스 개체에 있는 가상 함수의 구현을 호출할 수 있다..

DX11 - 텍스춰링

적용 전 Point Texturing Linear Texturing 이론 선형 보간법(Linear Interpolation) 이용해서 값 구함 해당 값을 적용해서 최종적으로 찾고싶은 컬러 값을 샘플링하는 것이 가능하다. 이를 Linear Sampling 한다라고 말한다. 2차원 공간에서 1차원의 선형 보간법(Linear Interpolation) 을 두번 반복하는 것을 BiLinear Interpolation 이라고 한다. Linear Texturing 적용 높은 해상도 이미지를 적용한 예시 텍스춰링은 단순히 이미지를 3D 모델에 씌워주는 것 뿐만 아니라 마치 그래픽스를 다루는 개발자가 아주 자세하고 복잡한 3D 모델을 렌더링한 것 같은 결과를 매우 효율적으로 만들어준다. 이는 언리얼에서 고해상도 그래픽..

그래픽스/DX11 2024.04.03

C++ 복사 생성자, 이동 생성자, Push_back, emplace_back

복사, 이동 생성자 등을 정의하는 이유유저가 직접 동적할당하는 new의 경우에 얕은 복사를 방지하기 위해서이다.vector, string, 스마트 포인터는 이와 무관하다.  클래스에서 컴파일러가 알아서 만들어주는 메소드 1. 생성자2. 소멸자3. 복사 / 이동 생성자4. 복사 / 이동 연산자 유저가 클래스 내의 멤버 변수로 포인터를 사용한다면소멸자, 복사 / 이동 연산자 및 할당자를 관리해야 한다. 초기화 할 때는 습관적으로  brace initialization - {} 을 사용하도록 하는 것이 좋다. 이는 C++11에서 추가된 우측값 레퍼런스와 연관이 있다.처음에 보면 다소 생소할 수 있는 개념이지만 천천히 학습하다보면 이해 가능하다.  복사 생략(Copy Elision)#include using n..

STL 컨테이너

STL 컴포넌트의 개요 STL에는 여섯 가지의 주요 컴포넌트 즉, 컨테이너(container), 제너릭 알고리즘(generic algorithm), 반복자(iterator), 함수 객체(function object), 어댑터(adaptor), 할당기(allocator)가 포함되어 있다. 컨테이너 객채들의 컬렉션을 저장하고 있는 객체를 SLT에서는 컨테이너라고한다. STL에는 두 가지 종류의 컨테이너가 있는데, 하나는 시퀀스 컨테이너이고, 다른 하나는 정렬 연관 컨테이너이다. 시퀀스 컨테이너 시퀀스 컨테이너는 타입이 동일한 객체들을 선형으로 구성한 컬렉션이다. STL의 시퀀스 컨테이너에는 다음 세 가지 종류가 있다. vector : 가변 길이 시퀀스를 임의 접근(random access)할 수 있으며, 시..