전체 글 311

CPU 레지스터

레지스터는 CPU 내부에 존재하는 다목적 메모리(저장 공간)입니다. CPU와 함께 있는 메모리 이므로 고속으로 데이터를 처리할 수 있습니다. 간단히 레지스터는 CPU가 사용하는 변수로 생각면 좋습니다. IA-32(Intel Architecture, 32bit) 레지스터의 구성은 아래 그림과 같습니다. 범용 레지스터(General-Purpose Registers)EAX (Extended Accumulator Register)산술연산 명령에서 상수/변수 값을 저장하거나 함수의 리턴 값이 저장되는 용도로도 사용됩니다. EDX(Extended Data Register)EAX와 함께 복잡한 연산을 위한 추가적인 데이터를 저장할 때 사용됩니다. 리턴 값 용도록는 사용되지 않습니다. EDX는 EAX의 확장 개념으로 ..

[C++] std::function

C++11표준 라이브러리의 한 템플릿으로, 함수 포인터 개념을 일반화한 것입니다. 함수 포인터는 함수만 가리킬 수 있지만 std::function은 호출 가능한 객체이면 그 어느 것도 가리킬 수 있습니다. 즉, 함수 처럼 호출 할 수 있는 것이면 그 무엇이라도 std::function으로 가리킬 수 있습니다. 예를 들면 함수, operator(), 람다 함수들이 있으며 다음은 그 예시입니다. int sum(int a, int b) { return a + b; } struct Sum { int operator()(int a, int b) { return a + b; } }; int main() { std::function s1 = sum; std::function s2 = Sum(); std::functi..

대용량 데이터베이스 솔루션 with MSSQL

대용량 데이터베이스 솔루션 1, 2권은 제가 20년 전에 데이터베이스 공부를 위해 읽었던 책입니다. 이 책들은 제가 데이터베이스를 대하는 임하는 자세를 바꾸게 해 준 책입니다. DBA에게는 바이블과 같은 책이기도 합니다. 이 책들의 내용들 중에 서버 개발 프로그래머들이 꼭 필요한 내용들을 정리하였습니다. 이 책은 오라클로 설명하고 있으며 오라클은 게임 개발에서 거의 사용되지 않고 있고 주로 많이 사용하는 MS-SQL에 맞추어 내용을 정리 하였습니다. 여러분에게 관계형 데이터베이스 즉 RDB 개발은 어려웠나요? 제 생각에는 대부분의 서버 개발 프로그래머는 DB 개발을 쉬워 해요. SQL 문법을 익히기만 하면 원하는 결과를 쉽게 얻을 수 있기 때문이죠. SQL 문법 자체는 쉽기 때문에 이렇게 생각합니다. 이..

독서 리뷰 2020.09.09

콘텐츠의 미래

옐로우스톤 국립공원의 화재에 대한 대처 방법 소개로 부터 이 책은 시작한다. 화재가 나면 당연히 불을꺼야 하는데 오히려 자연적으로 진화가 되도록 내버려 둘 때도 있다. 생각치도 못했던 사고의 전환이었다. 이러한 사고의 전환은 책을 읽는 내내 이어 졌다. 노르웨이의 작은 신문사 십스테드가 42개국의 광고를 점령, 애플의 스티브 잡스가 PC 시장에서 얻은 교훈으로 아이팟, 아이폰으로 성공, 뉴욕타임스가 모두들 안 될 것이라고 했던 디지털 신문의 유료화를 성공, 인터피디아는 실패 했디만 위키피디아가 성공한 이유, 넷플릭스, 아마존, 텐센트, 페이스북 등이 관계를 이해하고 성공한 이야기 들을 전하고 있다. CD 시장에서 인터넷의 발달하고 mp3 파일 불법 복제로 인해 음악 시장이 망할 것으로 생각하였으나 음악 ..

독서 리뷰 2020.09.09

[C++] Closure(클로저)

Closure? Lexical binding을 지원하는 함수형 언어로 부터 파생된 개념이며, 코드 블럭을 정의할때 스코프내의 환경들을 기억하여 나중에 수행될 때도 원래의 환경에 따라 수행되는 것을 말합니다. 람다 표현식 VS 클로저 스콧 마이어(Scott Meyers)는 "람다와 클로저의 차이는 클래스와 클래스 인스턴스 사이의 차이점과 동일하다"라는 좋은 예를 들었습니다. 클래스는 오직 소스 코드에만 존재하며 런타임에 존재하지 않습니다. 클래스 인스턴스만이 런타임에 존재합니다. 즉, C++에서는 람다 표현식이 인스턴스화 된 것을 클로저라 합니다. 클로저의 예 #include #include std::function closureWrapper1() { int x = 10; return [x](){std::..

[Effective Modern C++] 항목 4: 연역된 형식을 파악하는 방법을 알아두라

형식 연역의 결과를 직접 확인 하는 수단으로서 코드를 작성/수정하는 시점에서, 컴파일 시점에서, 실행 시점에서 형식 연역 정보를 얻는 방법을 살펴보겠습니다. IDE 편집기 IDE의 코드 편집기 중에서 프로그램 개체(변수, 매개변수, 함수 등) 위에 마우스 커서를 올리면 그 개체의 형식을 표시해 주는 것이 많습니다. const int theAnswer= 42; auto x = theAnswer; auto y = &theAnswer; IDE 편집기는 x의 연역된 형식이 int이고 y의 연역된 형식이 const int*임을 표시해 줄 것입니다. 컴파일 가능 상태여야 편집기에서 요청된 개체의 형식을 표시 할 수 있을 것입니다. 간단한 경우에는 IDE가 알려준 정보가 쓸만합니다. 그러나, 복잡한 형식에서는 그리고..

[Effective Modern C++] 항목 3: decltype의 작동 방식을 숙지하라

decltype은 주어진 식의 구체적인 타입 그대로 전달하는(추출하는) 키워드입니다. 대부분은 예측한 형식 추출되지만 가끔씩 그렇지 않은 경우가 있습니다. decltype 과 auto에 관한 설명을 참고해주세요.decltype의 일반적 쓰임먼저 decltype의 명확한 경우들을 살펴봅시다.const int i = 0; // decltype(i)는 const int bool f(const Widget& w) // decltype(w)는 const Widget& // decltype(f)는 bool(const Widget&) struct Point{ int x; // decltype(Point::x)는 int int y; // decltype(Point::y)는 int }; Widget w; // declt..

[Effective Modern C++] 항목 2: auto의 형식 연역 규칙에 숙지하라

항목 1에서 템플릿 형식 연역을 알고 있다면 auto 형식 연역에 관해 알아야 할 것은 거의 알고 있는 셈입니다. 예외를 빼면 auto 형식 연역이 곧 템플릿 형식 연역이기 때문입니다. auto를 이용해서 변수를 선언할 때 auto는 템플릿의 T와 동일한 역할을 하며, 변수의 형식 지정자(type specifier)는 ParamType과 동일한 역할을 합니다. (T, ParamType이 무엇인지 모른다면 항목 1을 살펴봐주세요.) auto x = 27; // x의 형식 지정자는 auto const auto cx = x; // cx의 형식 지정자는 const auto const auto& rx = x; // rx의 형식 지정자는 const auto& 이 예들에서 x와 cx, rx의 형식들을 연역할 때, 컴..

[Effective Modern C++] 항목 1: 템플릿 형식 연역 규칙을 숙지하라

항목 1: 템플릿 형식 연역 규칙을 숙지하라 템플릿 선언은 다음과 같은 모습입니다. template void f(ParamType param); 호출하는 코드는 다음과 같은 모습니다. f(expr); 예를 들어 템플릿의 선언이 다음과 같습니다. template void f(const T& param); 그리고 이를 다음과 같이 호출한다고 합시다. int x = 0; f(x); T가 expr의 형식일 것이라고 기대합니다. 실제로 위의 예제에서 x는 int이고 T는 int로 연역됩니다. 그러나 항상 그런 것이 아닙니다. T에 대해 연역된 형식은 expr의 형식과 Paramtype의 형태에 의존합니다. 그 형태에 따라 총 세가지 경우로 나뉩니다. ParamType이 포인터 또는 레퍼런스이지만 Universal..

[C++] Online C++ 컴파일러

온라인 컴파일을 사용하면 매우 유용합니다. Wandbox https://wandbox.org/ [Wandbox]三へ( へ՞ਊ ՞)へ ハッハッ wandbox.org Compiler Explorer https://gcc.godbolt.org/ Compiler Explorer gcc.godbolt.org 각종 CPU, 컴파일러별 어샘블리 코드를 바로 볼 수 있습니다. Quick C++ Benchmarks https://quick-bench.com/ Quick C++ Benchmarks Quickly benchmark C++ runtimes quick-bench.com

반응형