어셈블 할 때 boundary alignment를 하는 이유가 무엇인가요?
주로 속도죠. ARM 등 몇몇 CPU를 빼고는 동작상의 큰차이는 없습니다.
예를 들어 - 32bit cpu, 32bit memory를 사용 - 32bit align되지 않은 memory에서 32bit data를 읽는 경우
예를 들어 x86계열이라면 mov [1001h], ax 처럼 하면 실제로 cpu는 - 1000h에서 memory read - 1003h에서 memory read - 두개를 잘 조합해서 1001h~1004h 값 만들기 처럼 align이 안되면 복잡한 과정을 수행하게 됩니다.
이외에도 cache, page align을 하여야 하는 경우도 있구요.
risc계열 cpu의 경우 대부분 명령어셋 구조 자체가 non-alignment 메모리 접근을 아예 하지 못하도록 되어 있습니다.
Written By the Black Knight of Destruction
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
주로 속도죠. ARM 등 몇몇 CPU를 빼고는 동작상의 큰차이는 없습
주로 속도죠.
ARM 등 몇몇 CPU를 빼고는 동작상의 큰차이는 없습니다.
예를 들어
- 32bit cpu, 32bit memory를 사용
- 32bit align되지 않은 memory에서 32bit data를 읽는 경우
예를 들어 x86계열이라면
mov [1001h], ax
처럼 하면 실제로 cpu는
- 1000h에서 memory read
- 1003h에서 memory read
- 두개를 잘 조합해서 1001h~1004h 값 만들기
처럼 align이 안되면 복잡한 과정을 수행하게 됩니다.
이외에도 cache, page align을 하여야 하는 경우도 있구요.
risc계열 cpu의 경우 대부분 명령어셋 구조 자체가 non-align
risc계열 cpu의 경우 대부분 명령어셋 구조 자체가 non-alignment 메모리 접근을 아예 하지
못하도록 되어 있습니다.
Written By the Black Knight of Destruction
댓글 달기