본문 바로가기

Dev/C++

멀티쓰레드 최적화 힙 메모리 할당기 - tcmalloc. jemalloc # TCmalloc (Thread-Caching memory allocation) - https://code.google.com/p/gperftools/ - 구글이 만든 성능 도구에 포함되어 있는 힙 메모리 할당자로서 크롬 및 많은 프로젝트에 사용 - 기존의 malloc 으로 대표되는 할당자의 경우 멀티쓰레드의 최적화가 고려되지 않은 상황의 구현체이기 때문에, Thread가 난무하는 현실 세계에서는 많은 성능 저하가 있다고 함 (메모리 할당, 관리도 동시성을 고려해야 하므로..) - 이쪽 계열 라이브러리 중에서는 가장 많이 알려져 있고, 기본 할당기에 비해 비약적인 성능 향상이 있다고 함. - 그리고 적용 방법도 드라마틱 하게, 인상적임. # 리눅스(Ubuntu, 14.10) 환경에서의 TCmalloc .. 더보기
cdecl/asb 개발 중.. cdecl/asb 개발 중.. 1. wg/wrk (Modern HTTP benchmarking tool) - wrk는 커맨드 라인의 옵션으로, 간단한게 Http 서비스의 성능 평가를 할 수 있는 툴. - 윈도우 환경에서도 쓸 수 있지 않을까 했지만, Linux의 aio(Asynchronous I/O)으로 구현 되어 있어 포팅 불가. - 비슷한 툴로 Apache ab, JoeDog/siege 등이 있으며, github에 "benchmark" 등의 단어로 검색하면 더 많은 언어로 작성되어 있는 오픈소스를 찾아 볼 수 있음. 2. Boost Asio - 윈도우 환경이라면 IOCP로 작성 가능 하겠지만, 기본적으로 작성해야 할 내용이 많고 크로스 플랫폼을 지원하고 성능적인 부분에서 검증이 되어 있는 Asio로 .. 더보기
cdecl/asb - Http benchmarking and load test tool for windows, posix # cdecl/asb - Http benchmarking and load test tool for windows, posix - wg/wrk (Modern HTTP benchmarking tool)과 기능이 비슷한, Windows 버전으로 만들게 된 커맨드 라인 툴. - boost::asio 와 asio 에서 지원하는 ssl(openssl)을 이용하여 구현. - VC++ 2013 환경에서 개발하고, 라이브러리 패키지 NuGet으로 관리. - Posix 환경은 g++ (4.8 이상, -std=c++11), boost 라이브러리 및 libssl-dev (openssl) 패키지 설치 # 테스트 결과 - 테스트 환경 ; Laptop Intel i5(4세대), 4 Core, 8G RAM, Windows 8.1 6.. 더보기
Catch (A modern, C++-native, header-only, framework for unit-tests, TDD and BDD) Github : https://github.com/philsquared/Catch Tutorial : https://github.com/philsquared/Catch/blob/master/docs/tutorial.md # 특징 - CppUnit, Google Test, Boost.Test 등등 다른 프레임웍크에 비해 의존성이 없는 헤더파일(catch.hpp) 하나면 사용 할 수 있음 * C++ Test Framework 비교 - 별도 빌드 모듈로 운영 할 수도 있음 - 크로스 플랫폼 지원 # 사용 - TEST_CASE 라는 기본 단위 테스트에 SECTION이라는 작은 부분으로 나누어서 테스트 할 수 있음 - 기본적으로 REQUIRE 와 CHECK 의 평가식을 이용하여 로직 검증. - REQUIRE 와 .. 더보기
C++ REST SDK (casablanca) 간단 샘플 * https://casablanca.codeplex.com/ The C++ REST SDK is a Microsoft project for cloud-based client-server communication in native code using a modern asynchronous C++ API design. This project aims to help C++ developers connect to and interact with services. What's in the SDK:Features - HTTP client/server, JSON, URI, asynchronous streams, WebSockets client, oAuthPPL Tasks - A powerful model for c.. 더보기
[C++11] Variadic template # Variadic template - template 에서 타입의 인자를 가변으로 처리 할 수 있는, 새로운 ... 표현식이이 생겼다 - http://en.wikipedia.org/wiki/Variadic_template - 그리고 또 다른 설명인 MSDN의 링크 http://msdn.microsoft.com/ko-kr/library/dn439779.aspx variadic 템플릿 함수를 통합하는 대부분의 구현은 일부 양식의 재귀를 사용하지만 전통적인 재귀와는 약간 다릅니다. 전통적인 재귀는 같은 서명을 사용하여 자신을 호출하는 함수를 포함합니다. (오버로드하거나 템플릿화할 수 있지만 매번 동일한 시그너처가 선택됩니다.) Variadic 재귀에는 다른 수의 인수(거의 항상 줄어듦)를 사용하여 varia.. 더보기
boost 설치 # msvc-14.0 : vc++ 2015# msvc-12.0 : vc++ 2013# 64bit : address-model=64bjam.exe toolset=msvc-11.0 link=static runtime-link=static --with-system --with-date_time --with-regex --with-thread -j 4 stage 출처 : http://www.viper.pe.kr/cgi-bin/moin.cgi/Boost 3.1. bjam 사용법 [Bottom] [Top]Boost 라이브러리는 대부분 Template 으로 구성되어 있다. 하지만 regex, thread 와 같이 빌드가 필요한 라이브러리를 포함하고 있다. bjam 은 이런 라이브러리들을 빌드와 설치를 자동화 해주기 .. 더보기
boost::asio 클라이언트 소켓 (timeout 기능) - 메세지를 한번 주고 받고 세션을 종료하는 클라이언트 소켓 - boost::asio 라이브러리 사용 (boost 의 date_time, thread, system 컴파일 필요) - boost::asio::deadline_timer 를 이용하여 timeout 기능 구현 - 비동시 소켓으로 구현한 동기 소켓(?) #pragma once #include using namespace std; #include #include #include using boost::asio::ip::tcp; struct IsEOF_Basic { bool operator()(const std::string &) { return true; } }; template class ClientSocket { public: ClientSoc.. 더보기
이미지 변환 모듈 (모바일용, GDI+) - 이미지의 포맷 변환 및 퀄러티, 크기조정(비율) 모듈 - Windows 환경, C++, GDI+, Component STDMETHODIMP CMobileImage::Convert(BSTR Src, BSTR Output, BSTR ImgFormat, long Quality, long Width, long Height, VARIANT_BOOL* pSuccess) { *pSuccess = VARIANT_FALSE; _bstr_t bstrSrc(Src); _bstr_t bstrOutput(Output); _bstr_t bstrImgFormat(ImgFormat); ULONG_PTR gdiToken; Gdiplus::GdiplusStartupInput gdiInput; Gdiplus::GdiplusStartu.. 더보기
C++0x, RValue Reference C++0x RValue Reference 라는것이 추가 되었다. RValue Reference는 Move semantics와 Perfect forwarding 이라는 두가지 기능을 가진다. 1. Move semantics 기존 부터 있던 Reference는 LValue Reference 라고 불린다. int n = 10; int &r = n; // LValue Reference int *p = &n; // 포인터 참조 방식 cout 더보기
C++0x Lambda 아래 링크의 글 중 Herb Sutter 의 Lambda 예제 및 설명에 관한 리플.. http://herbsutter.wordpress.com/2008/03/29/trip-report-februarymarch-2008-iso-c-standards-meeting/ []와 []안에 들어가는 내용에 대해서 명쾌하게 설명을.. Herb Sutter Re binders: Okay, I give! I’ll use a better example next time. (no name) asked: "How are local variables captured?" You have to specify whether it’s by copy or by reference. So this example is illegal beca.. 더보기
C++0x 지원 컴파일러 목록 http://wiki.apache.org/stdcxx/C++0xCompilerSupport 더보기