Taking baby-developer steps
2022.02.09. ft_printf() - 구현하기 본문
오늘 목표
- ft_printf() 구현 고민
- 초기 컨셉 코드 구현
오늘 한 일
- ft_printf() 구현 고민
- 이번 ft_printf()의 구현에 있어서 buffer management를 해서는 안된다는 금지 사항이 왜 들어갔을까를 더 고민하게 됬다.
- 저번 과제였던 get_next_line에서는 시스템 콜인 read()의 호출을 최소화 해야한다는 사항이 있어서, 동적할당을 이용해 버퍼 메모리 관리를 했었는데, 그것과 관련이 있다고 생각한다. 이번 ft_printf()에서는 버퍼를 쓰지 못하게 하는 대신 시스템 콜의 호출을 많이 하게 하는 거고, 이를 통해 1circle에서 cpu 점유율이 높은 함수(많은 시스템 콜 / ft_printf)와 메모리 점유율이 높은 함수(buffersize에 맞는 메모리를 할당,해제 / get_next_line)를 각각 만들어보도록 유도하는 건가 하는 생각이 잠시 스쳤다. cpu 점유율이 높다는 것은 일반적으로 시간 복잡도가 커진다는 것이고, 메모리 점유율이 높다는 것은 공간 복잡도가 크다는 것이다. 즉 "시스템 콜을 많이 할까 vs 메모리 할당을 많이 할까"의 문제는 항상 때에 따라 선택할 수 밖에 없는 문제이다.
- 메모리 할당을 할 필요가 없으니, 내가 느낄 때 문제에서 의도한다고 생각하는 방향대로 가려한다. -> 시스템 콜인 write()의 호출을 최대한 많이 하는 방향으로.
- 덧붙여, printf()원형함수의 첫번째 인자에 의도적으로 에러를 일으키는 string을 넣었더니, 해당 에러를 일으키는 부분을 만났다고 해서 바로 에러메세지를 반환하며 종료되지 않고, 끝까지 다 출력하며 출력한 문자의 갯수도 끝까지 모두 센 것을 볼 수 있었다.
이 에러 시 일단 모두 출력은 해내는 것을 보고, 원래는 check_valid()함수를 통해 들어온 str과 가변인자들이 valid한지를 먼저 검사하고 에러메세지 출력을 하려고 하였으나, 현재 목표는 printf()원형 함수의 구현이기 때문에, check_valid()부분 없이 구현해야겠다.
- 초기 컨셉 코드 구현
- 어느 순간 get_next_line()함수 구현 했던 방향으로 의식의 흐름(?) 이 이어졌는데, 그 방법을 이번 printf()과제 에서도 그대로 쓸 수 있을 것 같다. -> strchr()로 "%"와 같은 주요 기호 찾고 그걸 분기점 삼기
'Logs > 학습 log' 카테고리의 다른 글
2022.03.16. born2beroot - 가상환경에서 리눅스, 데비안 os 환경 구축하고 초기 세팅 및 서버 시작시 모니터링 스크립트 만들기(스크립트 만들기까지 완료) (0) | 2022.03.16 |
---|---|
2022.02.10. ft_printf() - 동작 잘 하는지 함수 단위로 확인하며 코드 작성 (0) | 2022.02.10 |
2022.02.08. ft_printf() - 가변인자 함수 사용 (0) | 2022.02.08 |
22.02.07. printf()관련 공부 - stdarg.h/ va_start, va_arg, va_copy, va_end (0) | 2022.02.07 |
2022.02.06. ft_printf 시작 (0) | 2022.02.06 |
Comments