전체 글 216

valgrind

간단한 사용법 $ valgrind --leak-resolution=high --trace-malloc=yes --leak-check=yes --show-reachable=yes -v [프로그램 전체 경로] $ valgrind --leak-resolution=high --leak-check=yes --show-reachable=yes -v [프로그램 전체 경로] $ valgrind --db-attach=yes --leak-resolution=high --leak-check=yes --show-reachable=yes -v ./test_hanl 실행이 끝난 다음에 malloc/free 된 메모리들에 대한 현황을 ERROR SUMMARY라는 이름으로 알려줍니다. leak된 것들이 있다면 어떤 종류이고 어떤 내..

Public/tip & tech 2009.05.12

Killed (+++ Killed by SIGKILL +++ )

$ ./test Killed $ strace ./test execve("./test", ["./test"], [/* 28 vars */]) = 0 +++ killed by SIGKILL +++ 어제까지 잘 동작하던 프로그램이 실행만 시키면 바로 죽어 버린다. 물론 gdb로 먹지 않고 strace로 찍어보니 시스템에서 kill signal이 날라오는것 같다. 원인은 간단했다. test.c에서 include 하는 헤더파일에 #define MAX 100000000 static int arr[MAX] 이런식으로 정의했더니 위와 같은 현상이 나타나는것이었다.. 물론 MAX의 크기를 줄였더니 문제는 없어졌다.

Public/tip & tech 2009.05.12

보이어 무어(boyer moore) 알고리즘

string = 'here is a simple example' pattern = 'example' BM의 특징은 패턴의 마지막 글자부터 비교를 한다는 것이다. 다른 한가지는 initialize를 한다는것이다. 여기서 말하는 초기화란 다음과 같다. 우선 영어의 경우 1바이트로 표현하기 때문에 1바이트가 가질수 있는 최대 크기는 256이다. 따라서 256개의 interger 배열을 선언하고 배열안에는 패턴의 길이로 초기화를 한다. 'example'의 경우는 7로 초기화를 한다. 그리고 'example'의 각 글자에 해당하는 알파벳에는 다른알파벳과 다른 숫자로 초기화를 한다. 초기화할 배열을 arr로 하면 arr[e] = 6 arr[x] = 5 arr[a] = 4 arr[m] = 3 arr[p] = 2 ar..

Public/tip & tech 2009.05.12

유니코드(uni) 를 utf8로 변환 (euc-kr <-> utf-8)

우리나라의 많은 DB와 웹페이지들이 아직까지도 여전히euc.kr로 되어 있는곳을 볼수 있다. 그런데 나처럼 검색쪽 일을 하다보면 자연스럽게 euc-kr에서 utf-8로 변환해야할 필요성이 발생하게 된다. 다국어 처리와 같은 문제도 있겠지만 한국어 처림내에서도 euc-kr은 한계가 있기 때문에 euc.kr에서 utf-8로 변환과정은 불가피해 보인다. 아래는 UCS2 => UTF-8로 변환하는 과정이다. 입력 어절 가 => 0xAC00(UCS-2) 0xAC00 => 10101100 00000000 0xF000 11110000 00000000 & ---------------------------- 10100000 00000000 >> 12 00000000 00001010 0XE0 00000000 1110000..

Public/tip & tech 2009.05.12

utf8를 유니코드(uni)로 변환 (euc-kr <-> utf-8) |

utf8로 된 코드를 UCS-2로 변환하는 과정 입력 어절이 '가'(utf-8)일 경우 코드값은 0xEA 0xB0 0x80 이다. 첫번째 바이트의 첫번째 비트가 0xE0 이기 때문에 3byte로 표현된 캐릭터임을 알수 있다. 첫번째 바이트 처리 0xEA & 0xE0 == 0xE0 11101010 0xA 두번째 바이트 처리 10110000 00111100 & -------- 00110000 >> 2 --------- 00001100 => 0xC 세번째 바이트 처리 100000000 000111111 & --------- 000000000 => 0x0 UCS-2의 첫번째 바이트 0xA => 10100000 0xC => 00001100 --------------- 0xAC UCS-2의 두번째 바이트 0x0 =..

Public/tip & tech 2009.05.12

valgrind (callgrind)

일반적으로 리눅스에서 작업중 튜닝이 필요할때 프로파일링 작업을 한다. 가장 일반적인 방법이 컴파일 옵션에 -pg를 주고 pgrof로 프로파일링된 내용을 보는것인데 이것과는 조금 다른 프로파일링 기법이 있어서 소개한다. 이미 많은 개발자들이 사용하고 있는 valgrind의 서브 모듈인 callgrind가 바로 그것인데 아래에 간단한 사용법을 정리하였다 실행 방법 > valgrind --tool=callgrind ./test /dev/null 실행된 내용은 가지고 출력 파일을 생성한다 >callgrind_annotate callgrind.out.7838 > callgrind.out.7838.txt 사용법 보기 > callgrind_annotate --help 함수별 결과보기 > ca..

Public/tip & tech 2009.05.12