Pergunta

Que considerações preciso fazer se quiser que meu código seja executado corretamente em plataformas de 32 e 64 bits?

EDITAR:Em que tipo de áreas preciso cuidar, por ex.imprimindo strings/caracteres ou usando estruturas?

Foi útil?

Solução

Opções:

Codifique-o em alguma linguagem com um Máquina virtual (como Java)

Codifique-o em .NET e não vise nenhuma arquitetura específica.O Compilador .NET JIT irá compilá-lo para você na arquitetura correta antes de executá-lo.

Outras dicas

Uma solução seria direcionar um ambiente virtual que roda em ambas as plataformas (estou pensando em Java ou .Net aqui).

Ou escolha um idioma interpretado.

Você tem outros requisitos, como chamar código ou bibliotecas existentes?

As mesmas coisas que você deveria ter feito o tempo todo para garantir a escrita de código portátil :)

diretrizes do mozilla e a Perguntas frequentes são bons pontos de partida

Presumo que você ainda esteja falando sobre compilando separadamente para cada plataforma individual?Como executá-los em ambos é completamente possível apenas criando um binário de 32 bits.

A maior delas é garantir que você não coloque ponteiros em locais de armazenamento de 32 bits.

Mas, na verdade, não existe uma resposta 'agnóstica de linguagem' adequada para essa pergunta.Você não conseguiria nem obter uma resposta particularmente firme se se restringisse a algo como o padrão 'C' ou 'C++' - o tamanho do armazenamento de dados, ponteiros, etc., depende terrivelmente da implementação.

Honestamente, depende da linguagem, porque linguagens gerenciadas como C# e Java ou linguagens de script como JavaScript, Python ou PHP estão presas à sua metodologia atual e para começar e fazer qualquer coisa além do material avançado, não há muito com que se preocupar. .

Mas meu palpite é que você está perguntando sobre linguagens como C++, C e outras linguagens de nível inferior.

A maior coisa com que você precisa se preocupar é o tamanho das coisas, porque no mundo de 32 bits você está limitado à potência de 2 ^ 32, mas no mundo de 64 bits as coisas aumentam 2 ^ 64.

Com 64 bits você tem um espaço maior para memória e armazenamento na RAM e pode calcular números maiores.No entanto, se você sabe que está compilando para 32 e 64, você precisa limitar suas expectativas do sistema ao mundo de 32 bits e às limitações de buffers e números.

Em C (e talvez em C++), lembre-se sempre de usar o operador sizeof ao calcular tamanhos de buffer para malloc.Dessa forma, você escreverá um código mais portátil de qualquer maneira, e isso levará automaticamente em consideração os tipos de dados de 64 bits.

Na maioria dos casos, a única coisa que você precisa fazer é compilar seu código para ambas as plataformas.(E isso pressupõe que você esteja usando uma linguagem compilada;se não for, provavelmente você não precisa se preocupar com nada.)

A única coisa que posso pensar que pode causar problemas é assumir o tamanho dos tipos de dados, algo que você provavelmente não deveria fazer de qualquer maneira.E é claro que qualquer coisa escrita em assembly causará problemas.

Tenha em mente que muitos compiladores escolhem o tamanho do inteiro com base na arquitetura subjacente, visto que o "int" deve ser o manipulador de números mais rápido do sistema (de acordo com algumas teorias).

É por isso que tantos programadores usam typedefs para seus programas mais portáteis - se você deseja que seu código funcione em tudo, desde processadores de 8 bits até processadores de 64 bits, você precisa reconhecer que, pelo menos em C, int não é rigidamente definido.

Os ponteiros são outra área a ter cuidado - não use long, long long ou qualquer tipo específico se estiver mexendo no valor numérico do ponteiro - use a construção adequada, que, infelizmente, varia de compilador para compilador ( é por isso que você tem um arquivo typedef.h separado para cada compilador usado).

-Adam Davis

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top