Presentation is loading. Please wait.

Presentation is loading. Please wait.

Byte Alignment ㈜ 웰컴정보시스템 김 정 은.

Similar presentations


Presentation on theme: "Byte Alignment ㈜ 웰컴정보시스템 김 정 은."— Presentation transcript:

1 Byte Alignment ㈜ 웰컴정보시스템 김 정 은

2 Byte Alignment 란? 32bit machine 에서 32bit bus line 을 활용하여 메모리를 access 한다. 프로세서의 성능 향상을 위하여 주소버스가 4의 배수형태의 주소만 access 하다. 어떤 객체(4byte) 가 4의 배수형 주소에 있지 않다면 메모리 access 를 2번 해야 한다. 이에 따라 각 변수는 저장 될 수 있는 주소의 번지 패턴이 있다. 이 모든것은 최적화를 위한 것이다.

3 General Byte Alignment Rules
2byte 형은 2byte boundary 에 정렬 4byte 형은 4byte boundary 에 정렬 Double (8byte) 형은 windows 에서는 8byte, 리눅스에서는 4byte boundary 가 된다. 배열은 그 형에 따라 boundary가 결정 align되어 있지 않는 주소를 잘못 쓸 경우 "bus error"라는 치명적인 오류 발생

4 Structure Byte Padding
구조체의 멤버들이 byte alignment 을 해야 하는 관계로 멤버들 사이에 임의의 공간이 생기는 현상(padding byte). 구조체의 경우 멤버 중 가장 큰 데이터 타입의 배수값으로 크기가 결정 alignment of starting address of a struct depends on the compiler and the platform

5 지역변수의 byte alignment char c :: 0022FF73 2293619
int main() { int i=0; char c=0; printf("char c :: %p %d\n",&c,&c); printf("int i :: %p %d\n",&i,&i); return 0; } int main() { char c=0; int i=0; printf("char c :: %p %d\n",&c,&c); printf("int i :: %p %d\n",&i,&i); return 0; } char c :: 0022FF int i :: FF char c :: 0022FF int i :: FF 변수의 위치가 달라져도 ( 정렬 순서 ) 바이트 alignment 는 지켜짐

6 구조체의 padding 과 크기 Int 형이 가장 큰 데이터 형 Int 배수 형태가 크기(12)로 결정
struct Message { char Data1; short Data2; int Data3; char Data4; }; int main() printf("%d \n", sizeof(struct Message)); return 0; } 결과 : 12 ( 예상 - 8 ) struct MixedData /* after compilation */ { char Data1; char Padding0[1]; // short 는 2의 배수 short Data2; int Data3; char Data4; char Padding1[3]; // }; Int 형이 가장 큰 데이터 형 Int 배수 형태가 크기(12)로 결정

7 Malloc 과 Alignment GNU malloc()은 8byte로 align되어 있는 값을 리턴


Download ppt "Byte Alignment ㈜ 웰컴정보시스템 김 정 은."

Similar presentations


Ads by Google