일단 windows 에선 주소보정이 있어보이네. 기본 코드로도 오류를 만들 수 없었다. (멀라 내꺼가 64bit 에서 wow 돌려서 그런건지~ 알수가 엄셔~)
다른 OS 에선 메모리 오류가 있을 수 있으니깐 비트 연산이나 intrinsic 으로 처리해 줘야 된다.
vc++ memmove 는 내부적으로 SSE instruction 을 쓰고 있기 때문에 순수 포인터 연산으로 이기는건 좀 불가능에 가깝다.
vc++ memmove 의 단점은 작은 용량 전송엔 취약하다는거지.
아래는 65536 바이트 전송을 기준으로 한 성능비교.
1. 32bit src 얼라인 상태 + tgt 얼라인 되지 않은 상태
2. 64bit src 얼라인 상태 + tgt 얼라인 되지 않은 상태
3. 64bit src tgt 둘 다 얼라인 되지 않은 상태 (비트 연산을 해도 ㅉㅉ보다 빠름)
아직 최적화를 덜해서 뭐 그저 그래 ㅡ, .ㅡ
여친이 땡깡부려서 나가봄~
어차피 memmove 이기기 힘든거 코드 완료하기 무지 귀찮다.
진리는 작으면 int 단위 for 문 크면 memmove
그리고 ㅉㅉ 의 코드 첫번째 while 문에 조건이 두 개가 필요할 이유는 없다. 몇 번 안도는 코드지만.
키야 ~ 코딩 멋지게 하시네요.
성능 측정 코드좀 주세요~
루프 언롤링은 지난번에 보여줬고, 이번 코드의 특징은 breakless switch 문. 짜투리 수십 바이트를 분기 한 번에 처리하는 것 보면 된다.
뒤에서 앞으로 복사해오는 순서를 지키면서 그렇게 하기 위해 포인터를 미리 계산해서 옮기는 부분이 핵심.
아직 코딩 덜 끝나서 끝나면 벤치코드까지 같이 한 번 더 올려줌.
넵 기다리겠습니다.
오