12
고고 고고고 고고고고고 고고 1 고 고고고 고고고 고고고 고고고 line by line 고고… 고 line 고 고고고고… 고고고고고 고고고고고고 20093319 고고고

Make fast file merge program using c

Embed Size (px)

Citation preview

Page 1: Make fast file merge program using c

고급 시스템 프로그래밍

과제 1

두 파일을 하나의 파일로 합치기line by line 으로…

각 line 을 뒤집어서…국민대학교 컴퓨터공학부

20093319 이동규

Page 2: Make fast file merge program using c

시작하기 앞서…

쉘 스크립트로 만들자 !

Page 3: Make fast file merge program using c

run.sh파라미터 3 개 필요실행 파일명 , 출력 파일명 , 실행 반복 횟수

EXECUTABLE_FILE

OUTPUT_FILE

REPEAT_COUNT

Page 4: Make fast file merge program using c

최종 결과 비교 – 100MB + 100MB

Template 최종 버전실행 시간 평균 130.276058 sec 46.400518 sec

성능( 최종 버전 ) / (Tem-

plate)0.356171

Page 5: Make fast file merge program using c

성능을 올리기 위해 한 일들…1. 동적할당

- 한 파일당 100MB 까지 테스트 완료 .- 100MB 이상도 가능하지만 코드에서는 최대 100MB 로 제한- Merge 할 파일의 파일 크기를 읽어서 크기만큼 동적 할당

2. XOR 연산자를 이용한 문자열 뒤집기 함수3. strtok_r() 로 문자열 파싱

- fread() 로 파일의 모든 내용을 동적할당한 메모리로 이동- ‘\n’ 으로 문자열 파싱

Page 6: Make fast file merge program using c

성능을 올리기 위해 한 일들 - 동적할당

Page 7: Make fast file merge program using c

성능을 올리기 위해 한 일들 - XOR 연산자를 이용한 문자열 뒤집기 함수

Page 8: Make fast file merge program using c

성능을 올리기 위해 한 일들 – strtok_r() 로 문자열 파싱

Page 9: Make fast file merge program using c

실패한 것들…- fgetc() 로 ‘ \n’ 이 나올때 까지 읽어서 버퍼에 저장 , ‘\n’ 이 나오면 fputs() 로 파일 출력 (Template 에 비해 시간은 조금 단축되었다 .)

변경 파일Template

Page 10: Make fast file merge program using c

실패한 것들…- fgetc(), fputc() 를 read(), write() 로 변경하여 동일한 기능을 하도록 변경하였다 . ( 실행시간이 대략 6 배 늘어났다 .)

변경 파일Template

Page 11: Make fast file merge program using c

실패에서 얻은 교훈

I/O 에 접근하는 건 비용이 너무 크다 .

최소한으로 접근하자 !

Page 12: Make fast file merge program using c

감사합니다 .