구조체의 경우에는 메모리 정렬을 해서 최적화를 합니다.
이렇게 되면 사이즈는 커져도 속도가 빨라 지죠..
보통 32bit의 데이타 사이즈 cpu를 사용하기때문에 정렬도
4byte단위로 하죠..
그래서 4, 8, 12...등의 순으로 정렬됩니다.
이 부분도 검색해 보면 많이 있는데...귀찬아서리 직접 해보시길..
데이터 버스의 크기와 어드레싱을 생각해 보면 쉽게 알 수 있습니다.
보통 32비트 머신의 데이터 버스의 크기는 당연히 32비트, 즉 4바이트가 되고요, 특정 메모리 번지에서 한번에 읽어올수 있는 데이터의 크기는 4바이트가 됩니다.
님의 경우와 같이 선언을 했을때, 만약 MMU가 5바이트를 그대로 붙여서 할당을 했다면, ch를 억세스 할 경우 한번의 메모리 접근으로 가져올 수 있습니다.
한번에 4바이트를 읽어오니깐 1바이트 ch와 4바이트 i의 상위 3바이트를 가져오게되는 거죠.
그런데 i를 읽기 위해서는 2번의 메모리 참조가 있어야 합니다. 처음 접근으로 i의 상위 3바이트를 가져오고, 다음 접근으로 i의 나머지 1바이트를 읽어온 후, 이 둘을 합쳐서 4바이트 i를 만들어야 하는 거죠..
이런 이유에서 컴파일러는 4바이트 alignment를 수행합니다.
alignment로 한번 검색해 보세요.--자주 올라오는 질문에네요.
alignment로 한번 검색해 보세요.
--자주 올라오는 질문에네요.
ㅎ~~ㅠ
정렬제한으로 인한 패딩때문에 그렇습니다..
정렬제한으로 인한 패딩때문에 그렇습니다..
자세한 내용은 정렬제한이나 패딩따위의 검색어로 검색해보시면..
많이 나올것같습니다..
구조체의 경우에는 메모리 정렬을 해서 최적화를 합니다.이렇게 되면 사
구조체의 경우에는 메모리 정렬을 해서 최적화를 합니다.
이렇게 되면 사이즈는 커져도 속도가 빨라 지죠..
보통 32bit의 데이타 사이즈 cpu를 사용하기때문에 정렬도
4byte단위로 하죠..
그래서 4, 8, 12...등의 순으로 정렬됩니다.
이 부분도 검색해 보면 많이 있는데...귀찬아서리 직접 해보시길..
내용 추가
데이터 버스의 크기와 어드레싱을 생각해 보면 쉽게 알 수 있습니다.
보통 32비트 머신의 데이터 버스의 크기는 당연히 32비트, 즉 4바이트가 되고요, 특정 메모리 번지에서 한번에 읽어올수 있는 데이터의 크기는 4바이트가 됩니다.
님의 경우와 같이 선언을 했을때, 만약 MMU가 5바이트를 그대로 붙여서 할당을 했다면, ch를 억세스 할 경우 한번의 메모리 접근으로 가져올 수 있습니다.
한번에 4바이트를 읽어오니깐 1바이트 ch와 4바이트 i의 상위 3바이트를 가져오게되는 거죠.
그런데 i를 읽기 위해서는 2번의 메모리 참조가 있어야 합니다. 처음 접근으로 i의 상위 3바이트를 가져오고, 다음 접근으로 i의 나머지 1바이트를 읽어온 후, 이 둘을 합쳐서 4바이트 i를 만들어야 하는 거죠..
이런 이유에서 컴파일러는 4바이트 alignment를 수행합니다.
댓글 달기