C++ memset() vs fill(), fill_n()
알고리즘 문제를 풀 때나, C++ 코딩을 할 때 배열을 초기화할 일이 있으면 습관적으로 memset()을 사용하는데, memset()이 배열의 타입단위가 아니라 1바이트단위로 초기화를 하기때문에 0x00으로 초기화할 경우에만 사용했었다.
아래는 내가 참고한 글
memset() : assembler로 작성되어서 속도는 무지 빠름
std::fill() : 내부적으로 루프문을 수행해서 초기화를 수행
fill_n의 구현체를 살펴보자. ( fill_n 함수의 명세에 맞는 서로 다른 구현체가 있을 수 있다. )
template <class OutputIterator, class Size, class T>
OutputIterator fill_n (OutputIterator first, Size n, const T& val)
{
while (n > 0) {
*first = val;
++first; --n;
}
return first; // since C++11
}
결론: 앞으로 배열을 초기화할 일이 있으면 memset() 대신 std::fill_n()을 사용하자.
피드백에 따른 추가사항
memset 함수를 사용할 수 있다면 더 좋은 퍼포먼스를 낼 수 있다.
따라서, fill_n 함수도 memset 함수가 사용 가능한지 먼저 체크해보고 안되면 루프을 돌려 초기화 작업을 수행한다.
'Programming > C C++' 카테고리의 다른 글
[C++17] Structed Bindings (0) | 2019.11.09 |
---|---|
[문법] 2차원 배열을 함수의 매개변수로 사용하기 (0) | 2019.09.21 |
[C++/Build] 빌드 자동화를 위한 make 유틸리티 (0) | 2019.06.17 |
[C++/Build] Makefile - 빌드 자동화 (0) | 2019.06.13 |
[C++ STL] '정렬 알고리즘(sort algorithm)' (0) | 2019.06.03 |
댓글
이 글 공유하기
다른 글
-
[C++17] Structed Bindings
[C++17] Structed Bindings
2019.11.09 -
[문법] 2차원 배열을 함수의 매개변수로 사용하기
[문법] 2차원 배열을 함수의 매개변수로 사용하기
2019.09.21 -
[C++/Build] 빌드 자동화를 위한 make 유틸리티
[C++/Build] 빌드 자동화를 위한 make 유틸리티
2019.06.17 -
[C++/Build] Makefile - 빌드 자동화
[C++/Build] Makefile - 빌드 자동화
2019.06.13