달력

112024  이전 다음

  • 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
리틀 엔디안과 빅 엔디안의 분류를 어찌보면 시스템 프로그래밍으로 놔야할것같긴한데... 이건 C언어 소스로 표현하니 알고리즘이라 판단하여 알고리즘 C에 분류를 했습니다.
 
 
기본적으로 컴퓨터는 읽기 쓰기를 1바이트 단위로 처리하구요. 데이터를 스택에 넣을때 어떤 순서대로 넣는냐에따라 컴퓨터 종류가 달라요. 이것을 바이트오더(바이트 순서) 라고해요.
 
 
 
4바이트 짜리 정수(int) 0x12345678 를 스택에 넣을때 0x78를 먼저 넣는다면 리틀엔디안이 되는거고 반대로 0x12를 먼저 넣는다면 빅엔디안이 되는거에요.
 
 
둘이 차이점은 계산할때와 비교할때 확실이 눈에 띄어요.
 
빅엔디안으로 두 숫자를 비교한다고 생각해보세요.
보통 숫자 비교는 제일 큰자리에있는 숫자, 즉 왼쪽부터 비교하면 비교하는데 속도가 빨라요.
 
빅엔디안은 숫자를 앞에서부터 차곡차곡 스택에 집어 넣으니까요.
 
비교를 만약 리틀엔디안으로 하게된다면 리틀엔디안은 숫자 뒤에서부터 스택에 집어 넣기 때문이 빅엔디안보다 속도가 느릴수밖에 없지요.
 
그렇지만 숫자 계산을 한다면요.
 
리틀엔디안이 빅엔디안보다 속도가 빨라요.
 
두 숫자를 계산을 할 경우 가장 낮은 자리수에 있는 숫자를 계산을 해보고서 자리 올림수가 있는지 없는지 판단을 하고서 자리올림수와 다음 숫자를 계산을 하죠.
 
그렇기때문에 두 방식중 어느게 좋다 라고 확정 지을순 없어요.
 
빅엔디안은 UNIX 에서 사용하는 RISC 프로세서에서 사용 하는 바이트 오더구요. 동시에 소켓 프로그래밍에서 중요한 네트워크 바이트 오더 에요.
 
리틀엔디안은 Intel 계열의 프로세서에서 사용하는 바이트 오더에요.
 


[그림 1] Endian
 
소스는 포인터를 사용했습니다.
 
5번째 줄에 4바이트 정수형변수 a에다가 0x12345678을 넣고서
1바이트 정수형포인터변수 b에다가 a의 시작 주소를 주었어요.
 
a의 시작 주소니까 처음에 들어간 숫자가 있겟죠?
 
8번째 줄과 13번째 줄은  (*b)에 0x78인지 0x12인지 비교후 printf로 문자열을 찍는 간단한 프로그램이에요.
 
[그림 2] Endian_cmd
 
저는 리틀 엔디안이라네요.
 
리틀 엔디안과 빅 엔디안을 요약정리를 하면요.
 

빅 엔디안

리틀 엔디안 

Unix 의 RISC계열의 프로세서가 사용하는 바이트 오더링

네트워크에서 사용하는 바이트 오더링

앞에서부터 스택에 PUSH

비교연산에서 리틀 엔디안보다 속도가 빠름

Intel 계열의 프로세서가 사용하는 바이트 오더링

 

뒤에서부터 스택에 PUSH

계산연산에서 빅 엔디안보다 속도가 빠름

  

단순한 프로그래밍 할땐 빅 엔디안과 리틀 엔디안을 구분하면서할 필요가 없기에 크게 신경 쓸 필요는 없지만, 알아두면 안좋을것 없으니까요. ㅋ

출처 : http://blog.naver.com/chhh92?Redirect=Log&logNo=70118120659

Posted by 위너즈
|