나는 게으르며 목표 컴퓨터의 엔디 언이 내 자신과 다르다면 깨뜨릴 수있는 코드를 작성하고 싶다. 그러나 그것이 언제 깨지는 지 알고 싶습니다. 필요할 때 또는 수정할 수 있습니다.컴파일 타임에 엔디안이 결정 되었습니까?
float와 integer의 endianness가 컴파일 된 프로그램의 속성이므로 컴파일 타임에 어쨌든 확인할 수 있습니다. 아니면 내가 런타임에 주장해야 할 것인가?
나는 게으르며 목표 컴퓨터의 엔디 언이 내 자신과 다르다면 깨뜨릴 수있는 코드를 작성하고 싶다. 그러나 그것이 언제 깨지는 지 알고 싶습니다. 필요할 때 또는 수정할 수 있습니다.컴파일 타임에 엔디안이 결정 되었습니까?
float와 integer의 endianness가 컴파일 된 프로그램의 속성이므로 컴파일 타임에 어쨌든 확인할 수 있습니다. 아니면 내가 런타임에 주장해야 할 것인가?
예, 엔디안은 문제의 시스템에 내재되어 있으며 컴파일 타임에 알려져 있습니다. 대부분의 OS에는 #define
이있어 어딘가에 엔딩이 무엇인지 알려줄 것입니다.
:
#if __BYTE_ORDER == __LITTLE_ENDIAN
...
#elif __BYTE_ORDER == __BIG_ENDIAN
...
#elif __BYTE_ORDER == __PDP_ENDIAN
...
#else
...
#endif
float와 integer의 endianness가 컴파일 된 프로그램의 속성이므로 컴파일 타임에 어쨌든 확인할 수 있습니까?
어떤 기계어 코드가 컴파일 될 때 결정됩니다. 프로그램은 완전히 다른 CPU 아키텍처에서 작동하는 기계 코드로 컴파일 될 수 없습니다.
현재 하드웨어에서 어떤 endianess가 사용되는지 런타임으로 확인하려면 몇 가지 방법이 있습니다.
Determining endianness at compile time도 참조하십시오. 대신 코드에서 특정 엔디안 가정에 대한 주장을 사용
, 당신은 어떤 데이터를 파일에 저장하거나 엔디안에 대한 투명한 네트워크 연결을 통해 전달하기 위해 기술을 사용합니다.
빅 엔디안 데이터 만 사용하도록 지정하고 코드는 hton<x>()
, ntoh<x>()
패밀리 함수를 사용하여 데이터를 인코딩하고 디코딩합니다 (network byte order 참조).
사실 며칠 전에 x86에 관한 질문이있었습니다. 그리고 가능합니다. x86 또는 PowerPC 등에서 실행될 수있는 Mac 프로그램을 생각해보십시오. 그러나 하나의 실행 파일에있는이 두 프로그램은 각각 고유 한 엔디안을 가지고 있으며 이는 CPU/플랫폼에 의해 결정됩니다. –
@RudyVelthuis : x86 및 PowerPC에서 실행할 수있는 프로그램이 없습니다.이와 같이 행동하는 프로그램은 실제로 실행 파일의 두 CPU 모두에 대한 바이너리를 가지고 있으며 OS는로드하고 실행하는 "phat"실행 파일의 어느 부분을 결정합니다. 따라서 두 가지 프로그램을 실행하는 것과 같습니다. 만약 그들 중 하나가'hton
endianness는 컴파일 타임에 * 결정되지 않습니다. 실제로, 그것은 좋아하는 텍스트 편집기를 시작하고 프로그램을 작성하기 훨씬 전에 결정됩니다. –
일부 하드웨어는 모두 (예를 들어 파워)을 제공합니다 ... 그러나 일반적으로 기본 모드가있다. 어쨌든, 일반적으로 컴파일 타임 어설 션이면 충분합니다.
재미있는 사실, 이것을 몰랐다. _ "어쨌든, 컴파일 타임 어설 션은 일반적으로 충분합니다."_ Id는 아마도 파일 형태로 또는 네트워크를 통해 컴퓨터간에 데이터를 교환하려고한다면 _endianess transparent_code를 작성하려고합니다. –
@ πάνταῥεῖ 어쩌면 당신은 _ "물론 컴파일 시간에 결정된다"_라고 대답하는 것을 고려해야합니다. –
OP는 그가 엔디안을 제동 할 필요가 있다고 말하면서, 그는 좋은 이유가있을 수 있다고 말했다. –
endianness는 * hardware *, 특히 사용 된 CPU에 의해 결정됩니다. –
번호. 당신은 엔디안이 무엇인지를 미리 알아야합니다. 예 : 정수에 대한 포인터를 고려하십시오. 그 포인터가 가리키는 메모리 주소는 무엇입니까? 해당 int의 상위 바이트 또는 하위 바이트? –
관련 : http://stackoverflow.com/questions/4239993/determining-endianness-at-compile-time – alk