티스토리 뷰
컴퓨터 공부를 하다보면 엔디언(Endian)이라는 개념이 나온다. 빅 엔디언, 리틀 엔디언
어원은 걸리버 여행기에 나오는 소인국들의 싸움의 원인인 달걀을 어느쪽으로 깨먹는가 하는 논쟁이다.
달걀의 뾰족한 부분이 아닌 상대적으로 넙적한 부분을 Big-end 라고 부른 것에서 나온 것이다.
그렇다면 컴퓨터에서 이야기하는 빅 엔디언, 리틀 엔디언은 무슨 의미일까?
1바이트가 넘는 타입을 메모리에 저장하는 방법
integer 4바이트 타입이 있고 이 타입의 값을 메모리에 저장한다고 생각해보자.
이 값을 16진수로 0x12345678 이라고 하자
컴퓨터 메모리는 한 바이트마다 주소값을 가진다. 4바이트를 저장해야 하니 4개의 메모리 주소에 각각 한 바이트씩 저장할 것이다.
메모리의 주소가 1, 2, 3, 4라고 할 때에 엔디언에 따라 어떻게 저장될까?
빅 엔디언
주소 |
1번지 |
2번지 |
3번지 |
4번지 |
값 |
0x12 |
0x34 |
0x56 |
0x78 |
리틀 엔디언
주소 |
1번지 |
2번지 |
3번지 |
4번지 |
값 |
0x78 |
0x56 |
0x34 |
0x12 |
아래 그림이 이해하기 더욱 좋겠다.
출처는 위키: https://www.wikiwand.com/en/Endianness
어떤 기준으로 엔디언이 결정될까?
엔디엔은 System architecture와 관련이 있다. 쉽게 이야기하면 CPU가 어디껀지에 관련이 있다.
출처: https://stackoverflow.com/questions/9237317/what-makes-a-system-little-endian-or-big-endian
Endian-ness is determined by the hardware, not the OS. So whatever (native) VM you install on it, will be the same endian as the host. (since x86 is all little-endian) |
다만 네트워크에서는 빅 엔디언으로 통일해서 쓴다. 여러 시스템간의 통신시에 혼선을 없애준다.
어떤 엔디언이 좋을까?
오늘날 큰 차이는 없지만 미묘한 장단점은 있다.
- 빅 엔디언은 사람이 읽기 좋기에 디버깅에 좋다.
- 리틀 엔디언은 하위 바이트에 주소값으로 바로 접근할 수 있는 점이 좋다. 변수의 첫 바이트 주소가 바로 변수의 주소인 특성 때문이다.
엔디언을 확인하는 Go 코드
간단히 현재 Go 코드가 돌아가는 시스템의 아키텍처와 엔디언을 확인하는 프로그램을 짜보았다.
테스트 코드: https://play.golang.org/p/j3bF2Vt_lcC
참고 결과
결국 Architecture가 모두 amd64 라서 리틀 엔디언이다.
Windows 10 |
OS: windows, Architecture: amd64 Little Endian: the first byte of int16 type 0x8811 is 0x11 |
WSL2 (in Windows 10) |
OS: linux, Architecture: amd64 Little Endian: the first byte of int16 type 0x8811 is 0x11 |
PlayGround |
OS: linux, Architecture: amd64 |
참고: 주요 아키텍처/OS 에서의 엔디언 정보: https://geraldonit.com/2017/09/04/big-and-little-endian-operating-systems/)
'development' 카테고리의 다른 글
ACID - 확실히 알고 넘어가자 (0) | 2021.04.26 |
---|---|
Slice, Array의 인덱스 표기에 대하여 - feat. Dijkstra (0) | 2021.02.05 |
클린 애자일 - 6장 애자일해지기 (0) | 2021.01.19 |
클린 애자일 - 5장 기술 실천 방법 (0) | 2021.01.19 |
ARP table 의 IP - MAC 쌍을 설정하기 (0) | 2021.01.18 |
- Total
- Today
- Yesterday
- 2023
- 제이펍
- solid
- 오블완
- 독서후기
- clean agile
- 영화
- notion
- 클린 애자일
- 티스토리챌린지
- go
- ChatGPT
- github
- strange
- bun
- 노션
- Bug
- golang
- agile
- 엉클 밥
- 체호프
- 인텔리제이
- websocket
- OpenAI
- 독서
- 잡학툰
- API
- Gin
- folklore
- intellij
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |