반응형

프로그래밍 언어/C/C++ 31

[C++11] Type Inference: auto

목차로 가기 - 업데이트 * ts님이 지적해주신 제목 오타 수정 C/C++(C++11 이전의 C++)은 어떤 변수를 사용하려면 변수의 타입을 지정하여 선언(Declaration)을 해야만 합니다. 예를 들면 아래처럼 말입니다. ### c++int a;char b; 그러나, 템플릿과 STL등을 사용하다보면 어떤 타입을 지정하여 선언한다는 것이 간단한 일이 아닙니다.예를 들어 아래처럼 복잡한 타입을 선언해야 할 수 있습니다. (내용은 타 코드에서 아무렇게나 가져왔습니다.) ### c++HashMap map = getMap(); 이를 위해 C++11에서 등장한 두가지 타입 추론(Type Inference) 방법중 하나가 바로 auto 입니다.위 문장은 간단히 아래와 같이 선언할 수 있습니다.### c++aut..

constructor/destructor에서 virtual method의 호출

virtual키워드를 사용해 child 객체의 메소드들을 호출할 수 있다는 것은 C++을 공부한 사람이라면 다들 알고 있는 사항이다.예를 들어, 아래의 코드에서는 child의 call method가 호출된다.### c++ class parent {public: virtual void call();};class child : public parent {public: void call();};int main(){ parent* p = new child; p->call(); // child의 call이 호출됨 } 그렇다면 child의 instance는 virtual로 선언된 메소드들에 대해서 항상 child를 호출하는가?오늘 그렇지 않다는 것을 배웠다. 아래 예제를 보자.### c++#include stati..

GCC 옵션 : version script

참고 : http://korea.gnu.org/manual/release/ld/ld-sjp/ld-ko_2.html 참고2: http://studyfoss.egloos.com/5254916 참고3: http://stackoverflow.com/questions/8129782/version-script-and-hidden-visibility gcc 옵션 중 version script라는 게 있다는 사실을 알았다. 정확히는 ld 옵션이기 때문에 gcc에서 옵션을 줄 때는 -Wl,--version-script=파일 경로 의 형태를 가져야 한다. 참고2에서는 버전 관리를 위해 사용했으나, 버전 관리 뿐 아니라 심볼 개수를 줄이는 용도로도 활용이 가능한가 보다. 예컨데,// t.c int __attribute__(..

[C++] new는 null을 return하는가?

작년에 malloc vs calloc이라는 글을 적었습니다. 그때는 급작스런 궁금증때문에 인터넷 검색+발번역을 했는데, 이번에는 new에 대해 신경쓰지 못했던 부분을 알게되었습니다. 흔히, new 나 malloc으로 메모리를 할당받고 난 후, 제대로 메모리가 할당되었는지 체크를 하지않는 경우가 많습니다. 하지만, 메모리가 부족한 상황은 얼마든지 나올 수 있으므로 체크를 해야 맞겠죠. 그렇다면, 어떻게 체크해야 할까요? 임베디드의 세상에서 malloc으로 메모리를 할당받은 후에는 null인지 확인하는 것이 보편적이라는 이야기를 들었습니다. 그렇다면 new는? C++을 배울때 제대로 공부하신 분들은 이 질문의 답을 정확히 알것입니다. 네, new 는 0을 반환하지 않습니다. 일부러 그렇게 만들지 않는한 말이..

static const char* vs static const char []

오픈소스에 버그를 하나 등록했는데 아래와 같은 Comment를 받았습니다. "this does not go to the .rodata section in the binary; use static const char foo[] instead." 이게 무슨 소린가 하고, 확인을 하기 위해 간단한 프로그램을 작성해보았습니다. ### c++/* file: constchar.cpp * * gcc -S -O0 constchar.cpp -DCONST_POINTER */ #if defined(CONST_POINTER) static const char* name = "hello"; #elif defined(CONST_ARRAY) static const char name[] = "hello"; #else static co..

우분투에서 ccache로 컴파일을 빠르게...

코딩/실행/디버깅의 전환은 매우 빠르게 이뤄져야 합니다. 놀지 말고 일하라! 가 아니라. 흐름을 유지하면서 개발하는게 좋다고 생각하기 때문입니다. 그래서 우연히 ccache란 것을 알게 되어 쓰기로 마음 먹었습니다. 설치는 간단합니다. apt-get install ccache 사용법도 간단합니다. PATH에 /usr/lib/ccache를 걸어주면 됩니다. export PATH=/usr/lib/ccache:$PATH 그럼 컴파일 시간을 비교해보겠습니다. WebKit/Efl 을 다운로드 받아 빌드해서 나온 시간입니다. 각 빌드는 빌드 결과물들을 모두 제거하고 빌드한 것입니다. 1. ccache 없이 풀빌드 real30m38.772s user50m25.953s sys5m55.686s 2. ccache 설치후 ..

POD vs non POD

참고자료 : http://gpgstudy.com/forum/viewtopic.php?t=10148&view=previous 참고자료2 : http://1stpasa.tistory.com/entry/PODPlain-Old-Data-Non-POD 참고자료3 : http://stackoverflow.com/questions/146452/what-are-pod-types-in-c POD (Plain Old Data) 메모리상에 연속적으로 나열되는 단순한 형태의 자료구조를 말한다. C에서 사용하던 built-in type과 built-in type을 묶어서 만들어진 struct 들이 여기에 속한다. class의 경우에는 가상함수가 있거나, 소멸자가 있거나, 할당자가 있으면 POD가 될 수 없다. POD에 해당하는..

memwatch

메모리 누수를 측정하는 툴 다운로드 URL: http://www.linkdata.se/sourcecode/memwatch/ http://blog.naver.com/PostView.nhn?blogId=lowcarpet&logNo=70029068932&redirect=Dlog&widgetTypeCall=true 간단한 예제로 실험한 결과 memwatch.log 1 2 ============= MEMWATCH 2.71 Copyright (C) 1992-1999 Johan Lindh ============= 3 4 Started at Tue May 24 22:08:35 2011 5 6 Modes: __STDC__ 64-bit mwDWORD==(unsigned long) 7 mwROUNDALLOC==8 sizeo..

GCC옵션: finstrument-functions

추가 조사 : -finstrument-functions-exclude-file-list instrument-functions 옵션은 함수의 시작과 끝에 다른 함수를 삽입해주는 옵션입니다. 용도는 다양할 것 같지만, 디버깅이 어려운 환경 - 예를 들어 임베디드, 멀티 프로세스 환경, 서버-클라이언트 구조 등에서 큰 도움이 될 것 같습니다. 그 외 많은 프로파일링 툴이 이것을 사용하여 나름의 기능을 구현하는 것 같습니다. 사용 방법은 무척 간단합니다. __cyg_profile_func_enter 와 __cyg_profile_func_exit는 instrument 옵션이 켜졌을 때 gcc가 연결해주는 함수입니다. 이 함수들은 다른 함수들과 다르게 no_instrument_function이라는 attribute..

반응형