2008년 4월 14일 월요일

메모리 할당/해제 단순화 하기

코딩을 하다보면 함수내에서 동적으로 메모리를 할당하고 그 함수를
벗어나기 전에 해제 하는 것이 보통의 원칙이다. 문제는 할당해야할 변수가
많다면 코드를 실행하는 순간순간 할당 성공 유무 체크, 실패시 이전 할당을
해제하기 위한 지저분한 코드가 들어가게 마련이다. 이런 지저분함을
없애기 위해 방법으로 할당은 여러번 나누어서 하데 해제는 한번의 호출로
이전 할당을 모두 해제 하는 방식을 생각해 볼 수 있다.

할당시 포인터를 stack 기반의 구조에 넣는다.
해제시 현재 호출함수 레벨에서 stack에 들어간 pointer들을
자동으로 찾아 해제한다.

'프로그래밍 수련법'(인사이트) 이라는 책의 '성능'편에 이와 유사한 언급이
있다. 이 책에서는 스택 기반의 메모리 할당 라이브러리가 있다고 한다.
스택 기반이라 해제를 따로 호출할 필요가 없다는 것이다. 함수가 끝나면
stack은 자동으로 청소 되기 때문이다. 헌데 이 책에서는 자세한 구현에
대한 언급은 없다.
나름 방법을 생각해 보면 인라인 어셈을 사용하여 SP 레지스터를 핸들링하지
않을까 생각된다.

2008년 3월 5일 수요일

xlc 컴파일러의 __VA_ARGS__ 사용 예



#define LOG_PRINT(level, ...) my_logprint(int level, __VA_ARGS__)

void my_logprint(int level, char *fmt, ...)
{
va_list ap;

va_start(ap, fmt);
...
va_end(ap);
}


위 코드에서 주의할 점은 매크로 정의 라인에서는 첫번째 파라메터 이후에 __VA_ARGS__ 가
오고 함수 정의에서는 두번째 파라메터 이후에 ... 이 온다는 것이다.

2008년 3월 3일 월요일

객체지향 용어 정리

1. Class - A class is a model of an entity or object.
2. Instance - An instance is a nonspecific actualization of the class.
3. Object - An object is a specific actualization of the class model, created at runtime, which uses the class as a template.
4. Message - A message is a specific behavior undertaken by the object, requesting the receiver to perform a behavior.
5. Method - Methods are the associated actions performed by an object when it receives the message.

2008년 2월 5일 화요일

각종 Unix 에서의 hostid 얻는 법

어떤 시스템에서는 hostid 라는 명령어가 있기도 하고 uname -i 형태로 얻을 수 있는 시스템도 있다. 이중 특정 시스템에서는 hostid 명령어가 올바른 값을 되돌리지 않기도 한다.

AIX (RS/6000,  PPC)    uname -m 결과의 하위 2글자를 제거 후 하위 8자리
HP                     echo `uname -i` 16op | dc

HP IA64                getconf CS_PARTITION_IDENT 실행 후 처음 4바이트
Linux                  /sbin/ifconfig ech0 | grep Hwaddr  6바이트 네트워크 어드레스
SGI                    echo `/etc/sysinfo -s` 16op | dc
SUN                    hostid

참조 : http://www.veritools-usa.com/hostid.htm

2008년 1월 16일 수요일

DB2 CLI 프로그램 trace file

~db2inst/sqllib/cfg/db2cli.ini 이 파일에 다음의 내용을 입력한다.

[COMMON]
Trace=1 ; trace 출력
TraceErrImmediate=1 ; 에러인 경우 즉시 출력
TraceComm=1 ; 통신 출력
TraceFileName=/tmp/clitrace.txt ; 출력 파일명
TraceFlush=1 ; 배출
TraceFlushOnError=1 ;
TraceTimestamp=1

2007년 12월 18일 화요일

AIX에서 Memory Leak 찾는 기법

환경변수를 이용하여 malloc, free 를 추적할 수 있다.

MALLOCDEBUG=report_allocations,output:/tmp/alloc_output.txt

프로그램이 실행되는 동안 위의 환경변수가 설정되어 있는 경우 /tmp/alloc_output.txt
파일로 alloc, free 되는 정보가 출력된다. 프로그램이 실행되는 동안은 alloc,
free 할때마다 그 기록을 메모리상에 가지고 있다가 종료가 되면 해제되지
않은 alloc 정보만 /tmp/alloc_output.txt 로 출력된다.

더 자세한 사항은 AIX 5L Version 5.3 General Programming Concepts: Writing
and Debugging Programs 에 나와 있다.

2007년 10월 30일 화요일

오라클 인스턴스 클라이언트(Oracle Instance Client) 설치

무엇,왜 : 만약 Pro*c으로 프로그램을 개발 하였다면 그것을 실행하기 위해서는 설치 플랫폼에 최소한 Oracle Client가 설치되어 있어야 한다. 하지만 번거롭다. 오라클 설치는 CD을 필요로 하고 용량이 많이 차지하며 X-terminal, root 권한을 필요로 한다. 이런 설치없이 독립적으로 동작하게 한다. 단지 필요한건 copy와 editor 뿐. (하지만 10g 이후 버전만 지원??)

어떻게: oracle instance client 을 오라클 홈페이지에서 받자.
여기서
Basic, SQL*Plus, SDK(개발자라면) 을 우선으로 다운받고 압축을 해제한다. (공통적으로 instanceclient_xx_y 폴더를 포함하고 있다)

환경 변수를 설정한다. 로그인 쉘 스크립트에 아래 환경 변수들을 각기 설정하자.

ORACLE_HOME,PATH, TNS_ADMIN : instanceclient_xx_y 경로로
NLS_LANG : AMERICAN_AMERICA.KO16KSC5601 혹은 적당한 값

다음은 tnsnames.ora 생성, 서버의 tnsnames.ora 을 복사해 와도 된다. 주의할 것은 tnsnams.ora 내용을 확인 할것.

주의: Pro*c 용 헤더파일은 없다. 만약 Pro*C 용 헤더파일들이 필요하다면 이 설치로는 부족하다. 오라클 패키지를 다운로드 받은 다음 선택설치로 선택하고 개발 및 Runtime, SQLPLUS 항목을 선택하고 설치하면 된다.