프로그래밍/C++ 13

Effective C++ - 2장 생성자 소멸자 및 대입 연산자

C++의 클래스에 한개이상 꼭 들어있는 것들은 생성자, 소멸자 대입연산자다. 5. C++가 암시적으로 호출하는 함수를 주의하자 컴파일러는 클래스에 대해 기본 생성자, 복사생성자, 복사대입연산자, 소멸자를 암시적으로 만들어 놓을 수 있다. class Empty(); class Empty() { public: Empty() {...}; Empty(const Empty& rhs) {...}; ~Empty() {...}; Empty& operator={const Empty& rhs} {...}; } 디폴트 생성자는 멤버 변수 생성자를 호출할수 있도록 자리를 마련함 디폴트 복사, 대입 생성자는 원본 객체의 비정적 객체를 복사함 주의점 : 복사,대입 생성자의 경우 legal & Reasonable 해야만 자동 생성..

프로그래밍/C++ 2021.05.12

SIMD Compiler ISPC 소개

GDC 2019 Intel에서 발표한 ISPC 세션을 재미있게 보았는데요. 특히, ISPC의 장점 중 ISA 셋이 바뀌어도 쉽게 버전업을 할 수 있다는 점이 마음을 울렸습니다.(...?) 좋은 프로젝트 인 것 같아 차근차근 정리하며 알아가려합니다! 모던 하드웨어의 고성능을 위한 병렬화의 종류 최신 하드웨어에서 고성능을 위한 병렬화의 종류에는 두가지가 있습니다. Multi Threading, Multi-Core Programming등 Task Single Instruction Multi Data (SIMD) 이중 두번째 SIMD와 관련된 기술인 ISPC를 소개하려합니다. ISPC ISPC는 Intel SPMD Program Compiler의 줄임말입니다. 이 컴파일러를 사용하면 닌자프로그래머 없이 컴퓨터의..

프로그래밍/C++ 2019.07.29

Memory Allocation API

Memory Allocation APIWindows 운영체제에서 메모리 할당 API를 이해하는것은 중요합니다.만약 메모리 관리를 요하는 언어를 사용할 계획이라면(C++ 같이) 아래에 있는 그림이 도움이 될것입니다.Windows 운영체제에 특화된 관점이며이 다이어그램을 보는 방법은 위로 갈수록 고차원적인 구현이 이루어져있습니다.아래 부분부터 살펴봅시다 Kernel-Mode memory manager커널 모드 메모리 매니져는 운영체제에서 메모리를 예약하고 할당하는 기능을 제공합니다.잘 알려진 Memory Mapped file과 Shared memory, copy-on-write 기능들도 지원하며직접적으로 User-Mode code에서 접근이 불가합니다. 그러므로 간단하게만 소개하고 넘어갑니다. Virtual..

프로그래밍/C++ 2018.05.27

LValue RValue

LValue RValuelvalue와 rvalue를 구분하는 가장 기초적인 방법은 등호(=)를 기준으로 좌변, 우변의 차이에 따라 구분하는 것이다. (Left, Right Value) 아래의 코드에서 x는 lvalue, 10은 rvalue이다. int x = 0; x = 10; 다음의 코드를 살펴보자. int x = 0; int y = 5; x = y;x=y라는 코드에서 x는 lvalue, y는 rvalue라고 불러야 할까? 사실 x, y 둘다 lvalue이다. 따라서 가장 기초적인 구분에서 더 나아가 구분하는 방법을 살펴보려한다.. lvalue rvalue를 구분하는 특징은 다음과 같다.lvalue의 특징1. lvalue는 좌변에 놓일수도 있고, 우변에 놓일수도 있다. 2. lvalue는 이름을 가진다..

프로그래밍/C++ 2018.02.13

Uniform Initialization

Uniform Initialization옛 C++의 초기화 문법은 다음과 같이 다양했다.C++ 11부터는 모두 중괄호 앞에 평등하다 (...)변수, 객체, 배열 등 모두 중괄호로 초기화가 가능하다.int i = 3; int arr[] = { 1,2,3,4,5 }; std::vector v; for(int i=0; iint로 암시적 형변환, 소수점 데이터 손실 char c1 = 256; // in->char 암시적 형변환, char의 범위를 벗어남. 데이터 손실로 인한 값 0 int a2 = {3.4}; // error char c2 = {256}; // error

프로그래밍/C++ 2018.02.06

Template Aliases

typedef이전부터 우리는 type을 다른 별명으로 호출하기 위해서 typedef를 많이 사용 해왔다. 예를들면 다음과 같은 코드들이 있다. typedef int INT; typedef unsigned long DWORD; typedef int BOOL; typedef unsigned char BYTE; typedef unsigned short WORD;usingusing이라는 키워드는 선언 사용, using 지시문, 그리고 별칭 및 typedef에 사용 할 수 있다. 특히 C++ 11에서의 using은 기존 typedef처럼 Alias를 부여할 수 있다. #include using namespace std; using INT = int; int main() { INT a; a = 0; return 0..

프로그래밍/C++ 2018.01.30

Function Pointer 사용하기

Function Pointer 사용하기. C++에서 포인터는 주소를 가르킨다. 흔히 우리가 보는 형태는 다음과 같았을 것이다. int * p = new int; *p = 10; 이는 변수의 주소를 가르키는 포인터다. 함수의 주소를 가르키는 포인터를 함수 포인터 즉, Function Pointer라고 한다. 함수 포인터는 일반 변수를 포인터와 약간 다르게 선언하는데 아래와 같이 선언한다. 반환형 (* 포인터변수이름) (함수의 매개 변수들); 다음과 같이 선언한다. #include using namespace std; int MyFunc() { return 1; } int main() { int(*p)(void); p = MyFunc; cout > cmd; if (cmd > bUseFunc3; if(bUse..

프로그래밍/C++ 2018.01.29

C++ Template이란

template 예로부터 많은사람들에게 C++의 Template 릿이라고 하면 뭔가 복잡하고 읽기 힘들다는 이미지가 있다.필자 또한 메타 템플릿 프로그래밍이 유행하던 시절 템플릿을 마개조해서 사용하느라 읽기 힘들고 유지보수하기도 어렵다느 소리를 들어왔기에템플릿에 대한 부정적인 이미지를 가지고 있었지만, 템플릿이란 존재를 언제까지 외면할 수 없을 뿐더러 꼭 사용해야하는 기능들도 있기에 템플릿에 대해 알아보기로 하였다. 오버로딩 코드를 짜면서 제곱 수를 반환하는 Square라는 함수를 만들었다. int Square(int n){ return n*n;} int main(){ Square(1); return 0;} 그런데, Square의 argument가 double형이길 바란다면? 어떻게 해야 할까?쉽게 생각..

프로그래밍/C++ 2018.01.14