리틀 엔디안이 이겼어?


34

최근 Big vs. Little Endian 전투에 관해 가르 칠 때, 한 학생이 그 문제가 해결되었는지 물었고 나는 몰랐다는 것을 깨달았습니다. 상기 찾고 위키 백과 문서 , 가장 인기있는 현재의 OS / 아키텍처 쌍 리틀 엔디안을 사용하는 것 같다하지만 인터넷 프로토콜 지정 빅 엔디안 패킷 헤더에 숫자 값을 전송. 이것이 현재 상태에 대한 좋은 요약입니까? 현재 네트워크 카드 또는 CPU가 바이트 순서 전환을위한 하드웨어 지원을 제공합니까?

답변:


25

나는 그것이 그만두었을 정도로 그다지 승리하지 않았다고 주장했다. 기본적으로 모든 모바일 시장을 구성하는 ARM은 바이 엔디안입니다 (오, 이단!). x86이 기본적으로 데스크톱 시장을 "승리"한다는 의미에서 엔디안이 거의 없다고 말할 수 있지만 오늘날 많은 응용 프로그램의 전체 코드 깊이 (얕은) 및 추상화 (많은)를 고려할 때보 다 문제가 훨씬 적습니다. 예전에는 나는 컴퓨터 아키텍처 수업에서 실제로 나오는 엔디안을 기억하지 않습니다.

많은 개발자들이 엔디안을 모르거나 왜 중요한지 의심합니다. 방대한 (그리고 방대한 의미의 ) 대다수에게는 일상적인 작업 환경과 전혀 관련이 없기 때문입니다. 화려하고 극적인 방식으로 화면에서 텍스트 파일을 조작하는 대신 모든 사람이 금속에 훨씬 더 가까이 코딩 할 때 30 년 전과 다릅니다.

필자는 일반적인 OO 시스템의 액세스 및 추상화 계층이 사용자로부터 구현 세부 사항을 숨기므로 객체 지향 프로그래밍이 엔디안에 대한 관심의 시작의 시작이라고 생각합니다. 구현에는 엔디안이 포함되므로 사람들은 명시적인 요소가 아닌 익숙해졌습니다.

부록 : zxcdw는 이식성이 문제라고 언급했습니다. 그러나 지난 20 년 동안 복수와 함께 무슨 일이 있었습니까? 가상 머신에 구축 된 프로그래밍 언어. 가상 머신 엔디안은 중요 할 수 있지만 기본적으로 문제가 아닌 지점까지 해당 언어에 대해 매우 일관되게 만들 수 있습니다. 심지어 VM 구현 자만 이식성 관점에서 엔디안에 대해 걱정할 필요가있었습니다.


2
예를 들어 어떤 형태 의 이식 가능한 코드를 작성할 때 중요한 관련 도메인이 여전히 많이 있습니다. 실제로 중요하지 않은 곳 은 플랫폼과 연결된 휴대용 코드가 아닌 코드를 작성할 때 입니다.
zxcdw

@zxcdw는 가상 머신 언어의 군대로 직접 연결됩니다 ... 나는 그것을 생각하지 못했습니다.
World Engineer

부록은 전적으로 사실이 아니며 (@zxcdw에 동의하지도 않음) 엔디안은 멀티 바이트 정수와 바이트 스트림 사이를 변환 할 때만 중요하며 암시 적으로 수행되고 플랫폼마다 다릅니다. 대부분의 현대 언어 (VM 기반이든 아니든)는 드물게 (불투명 한 데이터 유형으로 정수를 사용하여) 이식성을 달성 한 다음 플랫폼에 독립적으로 지정되거나 프로그래머가 명시 적으로 선택한 엔디안을 갖습니다.
Michael Borgwardt


2
@zxcdw-어셈블러에서도 엔디안 순서를 알 필요는 없습니다. 예를 들어, 상수는 한 번에 바이트를 지정할 필요가 없습니다. 상황은 C의 특정 직렬화 스타일과 다소 유사합니다. x & 0xFF엔디안 순서에 관계없이 항상 바이트 수가 8 비트라고 가정 할 때 가장 중요하지 않은 바이트 수를 제공합니다. 메모리에서의 상대 위치가 아닙니다.
Steve314

4

Endians는 바이너리 데이터 시스템을 전송할 때만 중요합니다.

프로세서 속도 (및 훨씬 더 낮은 스토리지 비용)가 향상됨에 따라 이진 데이터 인터페이스는 점점 더 희박 해 지므로 애플리케이션 계층에서는이를 알 수 없습니다. 텍스트 전송 형식 (XML / JSON)을 사용 중이거나 번역을 처리하는 데이터 계층 추상화를 사용하고 있습니다 (따라서 번역이 있음을 알지 못함).

그러나 이진 데이터 레이어에서 코딩 할 때는 매우 중요합니다. 예를 들어 VERITAS (현재 시만텍)에서 근무할 때 25 가지 하드웨어 플랫폼 (기타 / 작은 엔디안뿐만 아니라 다른 유형도 있음)에 구축 된 소프트웨어를 제작했습니다.


저의 학생들은 또한 휴대폰 용으로 개발하고 클라우드 컴퓨팅을 사용하여 세상이 PC와 Mac이 아니라는 것을 알고 있습니다.
Ellen Spertus

@Loki-기계의 엔디 언을 몰라도 직렬화 및 직렬화 해제가 가능합니다. 파일 / 스트림 / 무엇이든 데이터의 바이트 순서 만 알고 있으면됩니다. 예를 들어 (char) (x & 0xFF)C에서는 바이트가 8 비트 인 것으로 가정하면 엔디안 문제에 관계없이 최소 바이트를 제공합니다. 소프트웨어가 실행될 머신을 알지 못하고 바이너리 파일 형식을 설계했습니다. 기본적으로 하드웨어에 신경 쓰지 않고 파일 형식에 대한 엔디안 순서를 선택했습니다.
Steve314

@espertus : 물론 가능합니다.
Martin York

1
@ Steve314 : 물론 가능합니다. "Binary Data Layer"에서 작업 할 때는 데이터를 직렬화하려는 구성표를 구성 할 수 있으며 이식성있는 구성표를 작성하는 것은 어렵지 않습니다. 개인적으로 나는 60 년대 이후 만들어지고 잘 테스트 된 휠을 다시 발명 할 필요가 없습니다. ` h2nl 과 가족을 찾아보십시오. 이 기능 군은 플랫폼에 가장 적합한 작업을 수행하는 휴대용 (표준) 방법을 제공합니다.
Martin York

4

아니요, 아무도 이겼습니다. 우리는 종으로서 우리가 쓰는 방향과 우리가 운전하는 거리의 측면과 함께 바이트를 저장하는 순서를 표준화하지 못했습니다.

결과적으로, 네트워크 또는 파일을 통해 두 개의 서로 다른 시스템간에 데이터를 전송하려는 사람은 자신의 환경에서 데이터 덤프 코드의 합리적인 초기 버전이 올 바르고 작동하더라도 , 50 %의 확률로 고객의 업무를 수행합니다.

이 문제를 해결하려면 "arpa / inet.h"와 같이 70 년대로 거슬러 올라간 이름을 가진 헤더에서 "htonl"과 같은 이름의 플랫폼 별 기능을 찾아야합니다. .


10
정수를 나타 내기 위해 4 바이트를 보내는 대신 특수 헤더 텍스트, 꺾쇠 괄호, 키워드 및 4 바이트의 ASCII 표현으로 서식이 지정된 텍스트 블록을 보냅니다. 그런 다음 수신 측은 서식을 분석하여 정수 텍스트를 가져 와서 4 바이트로 다시 변환합니다. 이것을 진행이라고합니다
gbjbaanb

$ 적성 검색 XML | wc -l 677
Andrew Wagner

1

여전히 합의가 없습니다.

  • 대부분의 큰 컴퓨터 시스템 (서버 / 데스크톱 / 노트북)은 리틀 엔디안 아키텍처를 사용합니다.
  • 소형 컴퓨터 (태블릿 / 전화)의 대부분은 엔디안 독립 프로세서 아키텍처를 사용하지만 리틀 엔디안 순서를 사용하는 운영 체제를 실행합니다.

따라서 하드웨어 수준에서 LE가 훨씬 일반적입니다. 그러나:

  • 대부분의 컴퓨터 간 통신은 빅 엔디안 순서를 지정하는 프로토콜을 사용하여 수행됩니다.
  • 전 세계 소프트웨어의 상당 부분이 데이터가 외부 스토리지에 기록 될 때마다 빅 엔디안 순서로 기본 설정되는 가상 플랫폼에서 실행됩니다.

두 주문 모두 가까운 미래에 우리와 함께 할 것입니다.


가장 큰 시스템 의 대부분 (즉, "큰 철")은 일반적으로 빅 엔디안입니다. 즉, 소위 미니 또는 메인 프레임 시스템 (대부분의 사람들이 신경 쓰지 않는 백엔드 처리량을 크게 구성 함)

@jdv 그러나 대부분의 가장 큰 컴퓨팅 시스템 은 리틀 엔디안 x86-64 시스템이므로 성능이 중요합니다.
user877329

엔디안이 아키텍처 디자이너의 입장에서 편의를 넘어서는 것이라고 주장 할 수있는 사람은 아무도 없다고 생각합니다. 내가 그 고대 의견을 말할 때, 큰 철은 BE였습니다. 그러나 이것은 BE이기 때문이 아니라 아키텍처가 그런 방식으로 발생하기 때문입니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.