본문 바로가기

[C++0x] 람다식 들어가기 최근 C++의 표준인 C++0x 람다 함수가 추가되었다. 람다식 또는 람다함수는 기존 함수와 동일하다. (이후 람다함수) 단지 다른 부분은 익명(anonymous) 함수일 뿐이다. 익명이라는 것은 함수 명이 없다는 것이기에 기존 함수 선언과 같이 사용할 수 없을 뿐이다. 이 익명함수은 다른 언어에서도 많이 사용하고 있고 아주 유용하게 사용되고 있다. 작성: http://ospace.tistory.com/,2012.04.27 (ospace114@empal.com) 기본 기본 형은 다음과 같다. [] {};[]가 람다 삽입자(Lamda-introducer)이며, 뒤에 {}은 함수 블록과 동일하다. 삽입자라고 하는 이유는 선언에 의해서 다른 곳에서 재사용하기 위한 것이 아니라 그곳에만 삽입되어 사용되.. 더보기
[C++] 콘솔입력(pipe) 성능 비교 이전에 파일 읽기 성능 비교를 해보았다. 이번에는 파일이 아닌 콘솔에서 입력하는 성능을 확인해보았다. 이는 추후 PIPE를 사용하여 확장할 수 있어서 CLI에서 꽤 유용하다. 테스트한 파일은 읽기 성능과 동일한 텍스트 파일이며 14,682,256 byte 크기이다. 운영체제는 Windows7 32bit 환경이다. 작성: http://ospace.tistory.com/,2011.12.29 (ospace114@empal.com) 결과 일단 이번에도 결과를 보자. 혹시나 했지만, 역시나 c API가 성능이 매우 좋았다. cin의 >>연산자: 7313 msec cin의 getline(): 813 msec stdin과 fgets(): 349 msec fgets()을 사용할 경우 0.35msec이고 cin은 0.8.. 더보기
[C++] 파일 읽기 성능 비교 파일 읽기 성능을 비교해본 자료이다. 테스트 환경은 Windows7 32bit에서 수행하였다. 읽어온 텍스트 파일 크기는 14,682,256 byte이다. 작성: http://ospace.tistory.com/,2011.12.28 (ospace114@empal.com) 결과 일단 결과를 말하면 암담하지만 c++의 std의 ifstream의 성능은 매우 안좋다. 아래가 수행결과 이미지이다. 간단하게 설명을 하면 test_ifstream1에서 test_ifstream2까지가 한 줄의 문자열을 읽어오면서 반복적으로 모든 파일 내용을 읽어왔다. 그리고 test_ifstream3 ~ test_ifstream6까지가 모든 파일을 읽어오는 경우이다. 그리고, test_osfile1과 test_osfile2는 fope.. 더보기
C++ Delegate 구현원리 Delegate란 생소한 분도 있을 것이다. 나도 처음에는 정확한 개념이 잡히지는 않았다. 즉, 사용할 줄은 알지만, 어떻게 동작하는지, 어떤 개념이지 알지 못했다. 그리고, 이전에 Delegate 비슷한 것을 구현한 적이 있는데, 지금 보면 상당히 위험한 구조였음을 알게되었다. 이 글은 Delegate에 대해서 더 자세히 알고 싶은 분을 위한 글이다. 그럼, Delegate 안으로 들어가보자. 작성: http://ospace.tistory.com/ (ospace114@empal.com), 2011.01.17 Delegate란 Delegate는 위임이라는 의미가 있다. C++에서 Delegate은 전역함수, 일반함수, 멤버함수, 함수자(functor)를 Delegate에 작업을 위임함으로서 일관된 관점을.. 더보기
함수호출 규약 언젠가 정리해야지 하면서 이제야 정리하게 되었다. C나 C++를 하면서 함수 호출 규약은 적어도 한번은 들어보았을 것이다. 사실 이부분은 그냥 넘어가기 쉬운 부분이다. 그러나 컴파일러간, C와 C, C++와 C++, C와 C++간에 반드시 확인해서 넘어가야할 부분이다. 이부분은 언제 어디서 문제가 발생하지 모르기 때문이다. 그리고 API 정의할때도 반드시 확인해야하는 부분이기도 하다. 이 글에서는 X86환경에서 VC를 사용하여 확인하였다. 다른 컴파일러나 환경에서는 다를 수 있으니 주의하기 바란다. 함수 호출 규약 종류 여기서는 주로 VC에서 사용하는 함수 호출 규약을 살펴보기로 하겠다. 나머지 호출 규약은 추후에 계속 갱신할 계획이다. VC에서 제공하는 함수 호출 규약은 __cdecl __fastcal.. 더보기
Thunk와 용법3 - 인터페이스 프록시 드디어 thunk의 마지막 용법이다. 별다른 것은 아니고, 함수 호출시 중간에 thunk에 의해서 호출되는 기능이 결정되는 것일 뿐이다. 사실 John TWC의 글을 읽으면서 interface proxy에 thunk를 이용할 필요가 있을까하는 의문이 들었다. 이글을 정리해서 올리면서도 왜 사용하는지에 대해서는 의문이 들었다. 아직 내공이 부족한가보다... 작성: http://ospace.tistory.com/,2010.01.11 (ospace114@empal.com) Interface Proxy Interface Proxy라는 것은 다양한 인터페이스는 하나의 proxy로 접근하겠다는 의도이다. 예를 들어 하나의 모듈이 있다면, 이 모듈에는 IOne과 ITwo 인터페이스가 있다. 모듈은 다양한 기능을 사용.. 더보기
Thunk와 용법2 - 콜백함수를 멤버함수로 사용하기 이번에는 thunk의 두번째 내용이다. thunk의 자세한 정의는 "Thunk와 용법1 - 다중 상속에서 가상함수"에서 살펴보길 바란다. 여기서는 콜백함수를 멤버함수를 사용해서 콜백하는 것을 살펴보기로 하겠다. 제목만 봐서는 깜짝 놀랄 것이다. 구라치는 것이라고 생각할 수 도 있다. 물론 나도 그렇게 생각했었다. 어떻게 C함수로 콜백하는데 C++의 멤버함수를 호출할 수 있을까라고... 물론 C함수에 콜백 등록할 때에 객체 인스탄스를 넘겨주고, 콜백함 수 호출할때 해당 인스탄스를 넘겨준 다음에 해당 인스탄스를 적당한 클래스로 캐스팅해서 멤버함수를 호출하면 된다라고 하시는 분도 있을 것이다. 그러나, 여기서는 그런 복잡한 방법을 사용하지 않는다. 물론 더 복잡할 수 있지만... ㅡ.ㅡ; 운영체제 환경은 Wi.. 더보기
Thunk와 용법1 - 다중 상속에서 가상함수 thunk를 들은 것은 최근이다. 물론 전에 들었을지는 몰라도 그때는 그냥 넘어갔을 것이다. 최근 C++용 Delegates[1]를 보면서 다중 상속에서 가상 함수 호출이란 부분을 보면 이해하기 어려운 부분 있었다. 바로 그곳에 thunk라는 키워드가 있었다. 해당 내용은 각 컴파일러에서 가상함수 호출하는 방법에 대해 설명한 것인데 너무 간단히 설명만 해 놓아서 이애하는데는 너무 어려웠다. 그럼 thunk를 살펴보자. 작성: http://ospace.tistory.com/,2010.12.07 (ospace114@empal.com) Thunk? thunk라는 용어부터 정의해보자. thunk라는 것은 C++에서만 사용하는 것은 아니었다. thunk의 용법을 모두 3가지로 구분하고 있다.[2] 지연된 계산을 .. 더보기

반응형