상위 문서: Memory
개요
multi-byte data를 메모리에 어떠한 방식으로 저장하는 지를 byte ordering이라고 하며, 대표적으로 두가지 방식이 주로 사용된다.
- Big Endian: Sun, PowerPC
- Little Endian: x86-64, ARM*
Byte Ordering
만약 C code에 int x = 0x12345678을 저장하고자 한다면, 0x12(MSB)가 어디에 저장되느냐에 따라서 byte ordering 방식이 나뉜다.
- Big Endian: MSB(0x12)를 lowest address에 저장한다.
- 즉, x는 0x12, 0x34, 0x56, 0x78과 같이 byte단위로 쪼개어져서 저장된다.
- Little Endian: MSB(0x12)를 highest address에 저장한다.
- 즉, x는 0x78, 0x56, 0x34, 0x12과 같이 byte단위로 쪼개어져서 저장된다. byte8개에는 16진수가 2자릿수까지 저장되기 때문이다.
Checking Byte Order
아래는 data의 byte 표현을 알아보는 c 함수이다.
void show_bytes(unsigned char* start, size_t len) {
size_t i;
for (i = 0; i < len; i++) {
printf("%p: 0x%.2x\n", start + i, start[i]);
}
}
int main() {
int a = 303030;
show_byte((unsigned char*) &a, sizeof(int));
}
위를 실행하면 결과는 다음과 같이 나온다.
0x7ffd0f231864: 0xb6
0x7ffd0f231865: 0x9f
0x7ffd0f231866: 0x04
0x7ffd0f231867: 0x00
303030을 16진수로 나타내면 0x49fb6인데, 실행결과에서 0x04가 highest address에 저장된 것으로 보아 정상적인 little endian 방식으로 저장되었다.