문제

내 코드가 32 비트 및 64 비트 플랫폼 모두에서 올바르게 실행되도록하려면 어떤 사항을 고려해야합니까?

수정 : 어떤 영역에서 처리해야합니까 (예 :문자열 / 문자 인쇄 또는 구조 사용?

도움이 되었습니까?

해결책

옵션 :

가상 머신 (예 : Java)을 사용하여 특정 언어로 코딩

.NET에서 코딩하고 특정 아키텍처를 대상으로하지 마십시오. .NET JIT 컴파일러 는 실행하기 전에 올바른 아키텍처로 컴파일합니다.

다른 팁

한 가지 해결책은 두 플랫폼 모두에서 실행되는 가상 환경을 대상으로하는 것입니다 (여기서는 Java 또는 .Net이라고 생각합니다).

또는 통역 언어를 선택하세요.

기존 코드 또는 라이브러리 호출과 같은 다른 요구 사항이 있습니까?

이식 할 수있는 코드를 작성하기 위해 함께했던 것과 동일한 작업을 수행했습니다. :)

mozilla 가이드 라인 C faq 는 좋은 출발점입니다.

아직도 각 플랫폼에 대해 개별적으로 컴파일 하는 것에 대해 이야기하고 있다고 가정합니까?둘 다에서 실행하기 때문에 32 비트 바이너리를 생성하는 것만으로도 완전히 가능합니다.

가장 큰 것은 포인터를 32 비트 저장 위치에 넣지 않도록하는 것입니다.

그러나이 질문에 대한 적절한 '언어에 구애받지 않는'대답은 없습니다.표준 'C'또는 'C ++'와 같은 것으로 자신을 제한하면 특별히 확고한 대답을 얻을 수 없습니다. 데이터 저장소, 포인터 등의 크기는 모두 구현에 따라 크게 달라집니다.

솔직히 언어에 따라 다릅니다. C # 및 Java와 같은 관리 언어 또는 JavaScript, Python 또는 PHP와 같은 스크립팅 언어는 현재 방법론에 고정되어 있고 시작하고 고급 기능을 넘어서는 작업을 수행하는 데는별로 없습니다.걱정합니다.

하지만 C ++, C 및 기타 낮은 수준의 언어와 같은 언어에 대해 묻는 것 같습니다.

당신이 걱정해야 할 가장 큰 것은 사물의 크기입니다. 32 비트 세계에서는 2 ^ 32의 힘으로 제한되지만 64 비트 세계에서는 2 ^ 64만큼 더 커지기 때문입니다.

64 비트를 사용하면 RAM의 메모리 및 저장 공간이 더 커지고 더 많은 수를 계산할 수 있습니다.그러나 32와 64 모두에 대해 컴파일하고 있다는 것을 알고 있다면 시스템에 대한 기대치를 32 비트 세계와 버퍼 및 숫자 제한으로 제한해야합니다.

C (그리고 아마도 C ++)에서는 malloc의 버퍼 크기를 계산할 때 항상 sizeof 연산자를 사용하는 것을 기억하십시오.이렇게하면 어쨌든 더 이식 가능한 코드를 작성하고 64 비트 데이터 유형을 자동으로 고려합니다.

대부분의 경우 두 플랫폼 모두에 대해 코드를 컴파일하기 만하면됩니다.(그리고 그것은 컴파일 된 언어를 사용하고 있다고 가정합니다. 그렇지 않다면 아마도 아무것도 걱정할 필요가 없습니다.)

문제를 일으킬 수 있다고 생각할 수있는 유일한 것은 데이터 유형의 크기를 가정하는 것입니다.이 작업은 어차피해서는 안되는 일입니다.물론 어셈블리로 작성된 모든 것은 문제를 일으킬 것입니다.

일부 이론에 따르면 "int"가 시스템에서 가장 빠른 숫자 조작자가되어야한다는 점을 감안할 때 많은 컴파일러가 기본 아키텍처에 따라 정수 크기를 선택한다는 점을 명심하십시오.

이것이 많은 프로그래머가 대부분의 이식 가능한 프로그램에 typedef를 사용하는 이유입니다. 코드가 8 비트 프로세서에서 64 비트 프로세서까지 모든 작업에서 작동하도록하려면 C에서 int가 엄격하게 정의되지 않았 음을 인식해야합니다..

포인터는주의해야 할 또 다른 영역입니다. long, long long 또는 포인터의 숫자 값을 조작하는 경우 특정 유형을 사용하지 마십시오. 유감스럽게도 컴파일러와는 다른 적절한 구문을 사용하십시오.(사용하는 각 컴파일러에 대해 별도의 typedef.h 파일이있는 이유입니다.)

-아담 데이비스

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top