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 란거다. 개소리 즐.


다음 글에서 이어쓴다.