C C++ 24

C/C++ 가비지 컬렉션 라이브러리 libgc 사용하기

http://kr.sun.com/developers/solaris/techdocs/libgc.html C/C++ 가비지 컬렉션 라이브러리 libgc 사용하기Mukesh Kapoor 이 글은 메모리 관리와 관련된 런타임 에러들에 대해 다루고 가비지 컬렉션 라이브러리인libgc를 이용해 이러한 문제를 해결 하는 방법을 다룹니다. 대부분의 경우 코드를 변경하지 않은 채 사용자의 코드에 단순히 라이브러리만 링크하여도 에러는 수정 될 것입니다. 라이브러리의 API에서 사용 가능한 함수를 호출하여 추가적인 이점을 얻을 수도 있습니다. 라이브러리는 C API를 가지고 있으므로 사용자는 C 혹은 C++ 프로그램에서 둘다 이용 가능합니다.libgc는 썬 C++ 컴파일러 제품에 포함되어 있습니다.Contents - 가비지..

C C++ 2006.06.30

스트링 버퍼를 선언과 함께 초기화

함수 내에서 로컬변수로 스트링 버퍼를 사용할 때 사전에 반드시 초기화를 해야한다는 것은 누구나 알고 있다. 아마 대부분은 다음과 같은 방법으로 버퍼를 초기화 할 것이다. void do_something_function() { char szBuffer[MAX_BUF_SIZE]; .... memset(szBuffer, 0, sizeof(szBuffer)); .... } 그러나 버퍼를 선언함과 동시에 초기화가 이루어지도록 하면 다음과 같이 선언하면 된다. char szBuffer[MAX_BUF_SIZE] = {0}; char szBuffer[MAX_BUF_SIZE] = {}; char szBuffer[MAX_BUF_SIZE] = ""; 스트링 버퍼를 로컬이 아닌 글로벌로 선언하면 초기화를 명시하지 않아도 모두..

C C++ 2006.04.17

가변 인수

가. 가변 인수 함수 가변 인수 함수에 대해서 알아 본다. 가변 인수의 함수를 만드는 방법에 대해서는 물론이고 가변 인수 함수가 동작하는 원리에 대해서도 자세하게 분석해 볼 것이다. 조금 어렵기는 하지만 포인터를 적절하게 활용하는 예를 볼 수 있으며 포인터로 어떤 일이 가능한지를 경험할 수 있는 좋은 기회가 될 것이다. 가변 인수 함수가 어떻게 동작하는지를 설명할 수 있다면 포인터를 정복했다고 생각해도 좋다. 가변 인수란 말 뜻 그대로 인수의 개수와 타입이 미리 정해져 있지 않다는 뜻이며 그런 인수를 사용하는 함수를 가변 인수 함수라고 한다. 가변 인수 함수의 가장 좋은 예는 C언어의 가장 기초 함수인 printf이다. C언어를 배우는 사람이 가장 먼저 배우는 친근한 함수이므로 이 함수를 통해 가변 인수..

C C++ 2006.04.17

[펌] [GCC] 컴파일 옵션

gcc는 예전에는 GNU C Compiler의 약자였으나 지금은 GNU Compiler Collection의 약자로 다양한(?) 언어의 컴파일러들의 집합체이다. gcc는 한마디로 GNU에서 개발된 ANSI C 표준을 따르는 C 언어 컴파일러라고 말할 수 있다. gcc는 ANSI C 표준에 따르기는 하지만 ANSI C 표준에는 없는 여러 가지 확장 기능이 있다. 또한 gcc는 통합개발환경(IDE)을 가지고 있지 않은 command line 컴파일러이다. 옛날 Turbo-C를 주로 사용해 보셨던 분들은 tcc.exe와 비슷하다고 생각하면 된다. (*) -v 옵션 현재 사용되고 있는 gcc의 버전을 나타내는 옵션이다. 특정 소프트웨어 패키지를 컴파일하기 위해 어느 버전 이상의 gcc를 쓰도록 권장하는 경우가 ..

C C++ 2005.11.09

[펌] 메모리구조

프로세스의 메모리 구조 프로세스에 대한 이해는 프로그래밍의 핵심이라고 할 수 있다. 프로세스는 간단하게 '수행중인 프로그램'이라고 정의할 수 있다(참고로 프로그램은 수행 가능한 디스크상의 이미지라고 정의할 수 있다). 다시 말해, 프로세스는 디스크에 저장돼 있던 실행 가능한 프로그램이 메모리에 적재돼 운영체제의 제어를 받는 상태를 말한다. 프로그램을 작성해 컴파일하고 링크하면 실행 가능한 파일이 생성된다(윈도우라면 *.exe라는 파일이, 유닉스라면 기본적으로 a.out이라는 파일이 생성된다). 쉘을 통해 사용자가 프로그램을 수행시키면, 커널은 이 프로그램을 제어에 적합한 자료구조로 만들어 메모리로 읽어낸 후, 커널의 프로세스 테이블에 등록하고, 메모리, 파일, 입출력 장치 같은 자원을 할당하는데, 이때부..

C C++ 2005.11.09

[펌] VC++ 6.0 과 함께...

Add-In 프로그램이 이렇게 많다니.... 참고.... Visual C++ 6.0과 함께 사용하는데 유용한 프로그램.. Visual C++ 6.0을 여전히 애용중이라면, 아래와 같은 프로그램들을 같이 사용하면 정말 좋다.. 개중엔 공짜도 있고, 돈주고 사야하는 것도 있고, 아주 비싼 것도 있고, 말 안해도 당연히 대부분의 사람들이 사용중인 것도 있다.. WndTabs(http://www.wndtabs.com) 뉴스그룹에서 조동호님을 통해 알게된 공개용 프로그램.. 소스까지 공개가 되어 있으니 심심하면 함 까보는 것도 좋을 것 같다.. VC++ 6.0의 에디터창에 울트라에디터처럼 탭을 붙여주는 에드인이다.. 단점으로는 래쇼날 로즈와 함께 사용할때 이넘 때문에 VC++이 죽는 경우가 있다.. 수십개의 창을..

C C++ 2005.10.06

[펌] 중요 - socket을 제대로 닫기

socket을 제대로 닫기 1.요약 socket을 닫는 옳바른 방법에 대해서 알아본다. 2.본문 socket을 닫는 일반적이고 안전한 방법은 다음과 같다. shutdown(m_socket, SD_BOTH); closesocket( m_socket );각각의 의미는 다음과 같다. shutdown : 연결된 상대방 소켓에 연결이 종료됨을 알린다. closesocket : 소켓 핸들을 닫는다. 위에서 설명한것 같이 closesocket은 열려진 소켓의 핸들을 닫는 역활만을 하는것이 공식적이다. 그러나 실제 동작을 살펴보면 shutdown을 한것같은 효과를 볼 수 있다. 이것은 socket의 timeout처리 때문일것으로 생각된다. 다음은 이런한 과정을 거칠때 내부적인 수행과정이다. Client side (1)..

C C++ 2005.08.23