1. 정렬되지 않은 주소에 1바이트 보다 큰 단위로 접근하면 SIGBUS 오류가 발생.
2. 우리가 흔히 쓰는 Intel architecture ( CISC ) 에는 unaligned access protection 이 들어 있음.
이렇게 두 가지 구동 환경으로 나뉜다.
그리고 2번의 경우 다시,
1. protection : 단지 보호 차원. 성능은 조금 느려짐.
2. acceleration : unaligned pack SIMD 명령어들. aligned 관련 SIMD 와 아주 미세한 차이만 있다.
두가지로 나뉜다.
여기서 또 한가지
indi-rect addressing 을 위해서 다양한 레지스터 조합이 있을 수 있는데,
결과적으로 7~8가지의 제한된 레지스터만 사용가능하다.
즉, 레지스터의 조합으로 특정주소를 선택적으로 ( 단순연속이 아님 )접근하기 위해서는
write-back 이라는 비용을 감수할 수 밖에 없다는거다.
내가 누누히 말했고 니가 부정했던 명제는 이것이었지.
unaligned access protection 이 지원되는 환경에서, 호환성 문제가 없을 때
unaligned access 는 최적화를 위한 선택일 수 있다.
그에 대해 넌 최적화를 논하면서 unaligned access 를 이야기 하는게 개소리라고 일갈했지.
재밌는건, 니가 그 실험에서 unaligned access 가 memcpy 를 호출한다고 이야기 하지만,
1MB 이상의 접근에서 memcpy 보다 unaligned access 보다 빠르고, ( 수천 ~ 수만 클럭 차이 )
1MB 이하 (이를테면 64KB ) 에서 unaligned access 가 내장 memcpy 보다 느리다는
사실 조차 이해 못하고 있는듯. ㅋㄷ ( 거의 2 배 )
즉 니 unaligned 코드는 memcpy 가 아니란걸 우선 알아야 한다.
64KB 단위 1만회 테스트.
ㄴ 이 테스트의 결과는 memcpy != unaligned 란거다. 개소리 즐.
다음 글에서 이어쓴다.
댓글 0