memset은 최적화 플래그만 넣어주면 기본적으로 최대한 컴파일러가 잘 처리해줍니다.

괜히 안 건드는게 맞습니다. (디스어셈블리 확인 후 최적화가 제대로 수행되지 않았을 시 직접 수정합니다) (아키텍쳐에 따라 memset보다 memmove가 더 빠른 경우도 있습니다)

  1. int 단위로 memset을 작성하는 것도 좋은 방법이지만 컴파일러는 이를 넘어서 512bit씩 사용하는 SIMD(SSE, AVX512)를 사용해서 최적화 해줄 수 있습니다. 컴파일러가 SSE는 기본적으로 활성화 해주니 AVX나 AVX512 플래그를 넣어보세요.
  2. 이래도 성능이 더 필요하다면 다음 방법을 사용할 수 있습니다. 예를 들어, memset을 int-long long 으로 작성하거나 simd 로 작성하게 되면, 메모리 정렬 검사, 크기가 내가 사용하는 단위의 배수에 맞는지 검사를 수행해야 합니다.

그렇다면 memset()을 호출할 때, 인자로 들어가는 배열의 memory alignment를 보장하고, 128bit 단위용, 256bit 단위용 등 특정 크기의 memset()으로 따로 작성하면 이러한 내부 분기를 줄일 수 있습니다.

예시1

memset_128()
memset_128_aligned()
memset_4096()
memset_4096_aligned()

예시2 https://github.com/blockchain-research-foundation/AVX-Memmove/blob/master/memset.c