Questão Sistemas de 32 bits vs. sistemas de 64 bits


Quais são as diferenças entre sistemas de 32 e 64 bits?

Se você usou os dois, que tipo de diferenças acentuadas você já experimentou?

Seria um problema usar programas de 32 bits em sistemas de 64 bits em alguns casos?


219


origem


Existem muitas confusões aqui, e em outro lugar, na Web, entre o endereçamento físico (acesso ao RAM), a PEA afeta isso, a placa-mãe afeta isso e o endereçamento lógico (memória virtual por processo). Em um sistema operacional de 32 bits, a memória virtual é limitada a 4 GB menos o que o kernel reserva. É independente da RAM você poderia ter 0.1MB ou 8GB de RAM e você teria exatamente 4GB de memória virtual (mas alguns reservados pelo kernel). O PEA pode ser usado para ter mais RAM, mas não é uma resposta perfeita, pois o kernel NÃO pode acessar tudo. - ctrl-alt-delor


Respostas:


Nota: Essas respostas se aplicam a CPUs de PC padrão baseadas em x86 (Intel e AMD) e Windows (normalmente configuradas para usuários finais). Outros chips de 32 ou 64 bits, outros sistemas operacionais e outras configurações do sistema operacional podem ter diferentes compensações.

De uma perspectiva técnica, um sistema operacional de 64 bits oferece:

  • Permite que processos individuais abordem mais de 4 GB de RAM cada (na prática, a maioria dos sistemas operacionais de 32 bits, mas não todos, também limitam a RAM total do sistema utilizável a menos de 4 GB, não apenas o máximo por aplicativo).

  • Todos os ponteiros levam 8 bytes em vez de 4 bytes. O efeito sobre o uso de RAM é mínimo (porque você provavelmente não terá um aplicativo cheio de gigabytes de ponteiros), mas no pior dos casos teóricos, isso pode fazer com que o cache da CPU consiga armazenar mais de 1/2 ponteiros (tornando seja efetivamente 1/2 do tamanho). Para a maioria das aplicações, isso não é um grande problema.

  • Há muitos mais registradores de CPU de propósito geral no modo de 64 bits. Registradores são a memória mais rápida em todo o seu sistema. Há apenas 8 no modo de 32 bits e 16 registradores de propósito geral no modo de 64 bits. Em aplicativos de computação científica que eu escrevi, eu vi um aumento de desempenho de até 30% recompilando no modo de 64 bits (meu aplicativo poderia realmente usar os registros extras).

  • A maioria dos sistemas operacionais de 32 bits realmente permite que aplicativos individuais usem 2 GB de RAM, mesmo que você tenha 4 GB instalados. Isso ocorre porque os outros 2 GB de espaço de endereço são reservados para o compartilhamento de dados entre aplicativos, com o sistema operacional e para a comunicação com os drivers. O Windows e o Linux permitirão que você ajuste essa troca para 3 GB para aplicativos e 1 GB para o compartilhamento, mas isso pode causar problemas para alguns aplicativos que não esperam a alteração. Eu também estou supondo que pode prejudicar uma placa gráfica que tem 1 GB de RAM (mas não tenho certeza). Um sistema operacional de 64 bits pode fornecer aplicativos de 32 bits individuais mais próximos dos 4 GB completos para serem usados.

Da perspectiva do usuário:

  • A velocidade do aplicativo geralmente é mais rápida para um aplicativo de 64 bits em um sistema operacional de 64 bits em comparação com a versão de 32 bits do aplicativo em um sistema operacional de 32 bits, mas a maioria dos usuários não vê essa aceleração. A maioria dos aplicativos para usuários normais realmente não aproveitam os registros extras ou os benefícios são compensados ​​por ponteiros maiores que preenchem o cache.

  • Se você tiver algum aplicativo de memória (como editores de fotos, processamento de vídeo, computação científica, etc.), se tiver (ou puder comprar) mais de 3 GB de RAM e puder obter uma versão de 64 bits do aplicativo, a escolha é fácil: use o sistema operacional de 64 bits.

  • Alguns hardwares não possuem drivers de 64 bits. Verifique sua placa-mãe, todos os cartões plug-in e todos os dispositivos USB antes de fazer a troca. Observe que, nos primeiros dias do Windows Vista, havia muitos problemas com drivers. Hoje em dia as coisas são geralmente melhores.

  • Se você executa tantos aplicativos ao mesmo tempo que está ficando sem memória RAM (geralmente você pode dizer isso porque seu computador começa a ficar muito lento e você ouve o processamento da unidade de disco rígido), então você vai querer um sistema operacional de 64 bits (e RAM suficiente).

  • Você pode executar aplicativos de 32 bits (mas não drivers) no Windows de 64 bits sem problemas. A pior lentidão que medi para um aplicativo de 32 bits no Windows de 64 bits é cerca de 5% (o que significa que, se levar 60 segundos para fazer algo no Windows de 32 bits, ele levaria no máximo 60 * 1,05 = 65 segundos o mesmo aplicativo de 32 bits no Windows de 64 bits).

O que 32 bits vs. 64 bits faz não implica:

Em sistemas x86, 32 bits versus 64 bits diretamente refere-se ao tamanho dos ponteiros. Isso é tudo.

  • Não se refere ao tamanho do C int tipo. Isso é decidido pela implementação específica do compilador, e a maioria dos compiladores populares escolhe 32 bits int em sistemas de 64 bits.

  • Isso não diretamente consulte o tamanho dos registros normais sem ponteiro. No entanto, o uso de registradores aritméticos de 64 bits requer que o aplicativo e o sistema operacional também sejam executados no modo de ponteiro de 64 bits.

  • Isso não diretamente consulte o tamanho do barramento de endereço físico. Por exemplo, um sistema com linhas de cache de 64 bits e um máximo de 512GiB de memória precisa apenas de 33 bits em seu barramento de endereços (por exemplo, log2(512*1024**3) - log2(64) = 33).

  • Não se refere ao tamanho do barramento de dados físicos: está mais relacionado aos custos de fabricação (número de pinos no soquete da CPU) e aos tamanhos das linhas de cache.


262



Muito boa resposta. Especialmente porque você observou que não há realmente um limite de 4 GB de RAM, mas o limite de uso de memória de processo. Apenas para sua informação, acho que você deveria dar uma olhada neste link: unawave.de/windows-7-tipps/32-bit-ram-barrier.html?lang=EN - Breakthrough
São aplicativos que não funcionam em janelas de 64 bits: aplicativos de 16 bits / que usam drivers de modo kernel de 32 bits ou não assinados. Isso é muito para um viciado em software como eu ... - fluxtendu
@flextendu, dados os requisitos de desempenho daqueles programas antigos, você quase certamente poderia executá-los em uma máquina virtual. Com o VMware player, o Virtual PC e o Virtual Box por aí, não há razão para não experimentar um deles, se você tiver uma licença do Windows de 32 bits do Spere. Se você não quer mexer com isso, eles provavelmente vão trabalhar em "Windows XP Mode" também. - Mark Booth
BTW, os aplicativos de 32 bits não usarão mais de 2 GiB de RAM, a menos que um sinalizador específico esteja ativado em seu manifesto. Fonte: blogs.technet.com/b/markrussinovich/archive/2008/11/17/… - Hello71
Sim, tenho certeza de que o Hello71 encontrou algo muito importante que não é abordado aqui: a maioria dos aplicativos de 32 bits nunca aproveitará diretamente a RAM extra. Eu acho que isso vale a pena mencionar, não? - Django Reinhardt


Basicamente, você pode fazer tudo em uma escala maior:

  1. RAM por SO: Limite de RAM de 4 GB em x86 para o sistema operacional (na maioria das vezes)
  2. RAM por processo: Limite de RAM de 4 GB em x86 para processos (sempre). Se você acha que isso não é importante, tente executar um enorme aplicativo de banco de dados MSSQL. Ele usará> 4GB se você o tiver disponível e rodará muito melhor.
  3. Endereços: Os endereços são 64bits em vez de 32bits, permitindo que você tenha programas "maiores" que usam mais memória.
  4. Alças disponíveis para programas: Você pode criar mais identificadores de arquivo, processos ... Exemplo no Windows x64 você pode criar> 2000 threads por processo, mas no x86 mais próximo de algumas centenas.
  5. Programas mais amplos disponíveis: De um x64 você pode executar programas x86 e x64. (Janelas de exemplo: wow64, windows32 na emulação windows64)
  6. Opções de emulação: De um x64, você pode executar VMs x86 e x64.
  7. Mais rápido: Alguns cálculos são mais rápidos em uma CPU de 64 bits
  8. Dividindo vários recursos do sistema: Muita memória RAM é muito importante quando você deseja executar pelo menos uma VM que divide os recursos do sistema.
  9. Programas exclusivos disponíveis: Vários novos programas suportam apenas x64. Exemplo do Exchange 2007.
  10. Futuro obsoleto x86: Com o tempo, mais e mais 64 bits serão usados ​​e mais e mais x86 não serão usados. Assim, os fornecedores suportarão apenas mais de 64 bits.

Os dois grandes tipos de arquiteturas de 64 bits são arquiteturas x64 e IA64. Mas x64 é o mais popular de longe.

O x64 pode executar comandos x86, bem como comandos x64. O IA64 executa comandos x86 também, mas não faz extensões SSE. Há hardware dedicado no Itanium para executar instruções x86; é um emulador, mas em hardware.

Como o @Phil mencionou, você pode ter uma visão mais profunda como funciona aqui.


107



Hum. IA64 executa comandos x86. Não faz extensões SSE, no entanto. Há hardware dedicado no Itanium para executar instruções x86; é um emulador, mas em hardware. - tzot
Há alguns anos, Raymond Chen postou sobre o "limite" do segmento de 2000, e é mais ou menos uma lenda urbana: blogs.msdn.com/oldnewthing/archive/2005/07/29/444912.aspx - bk1e
Vote pela Arstechnica por sua explicação. - Avihu Turzion
RAM limite de 4GB não é bem verdade (é um limite artificial colocado em usuários domésticos sistemas Windows), verifique PAE. Com a maioria dos hardwares atualizados, um kernel Linux PAE (que é o que é usado por padrão para 32bits) pode endereçar mais de 4GB. O mesmo se aplica ao FreeBSD e ao NetBSD. - Izzy
Sistemas de 32 bits não podem usar mais de 4GB (1 ponto) por causa de que "endereços" (3 pontos) .Porque o maior número de 32 bits é 4.294.967.296 (= 4GB). Então, o seu primeiro e terceiro punt é o mesmo. Você pode remover o terceiro punt. :) - Jet


O maior impacto que as pessoas vão notar no momento é que um PC de 32 bits só pode endereçar um máximo de 4 GB de memória. Quando você tira a memória alocada para outros usos pelo sistema operacional, seu PC provavelmente mostrará apenas cerca de 3,25 GB de memória utilizável. Mover para 64 bits e esse limite desaparece.

Se você está fazendo um desenvolvimento sério, isso pode ser muito importante. Tente executar várias máquinas virtuais e você logo ficará sem memória. É mais provável que os servidores precisem da memória extra e, assim, você descobrirá que o uso de 64 bits é muito maior em servidores do que em desktops. A lei de Moore garante que teremos cada vez mais memória nas máquinas e, por isso, em alguns pontos, os desktops também mudarão para 64 bits como padrão.

Para uma descrição muito mais detalhada das diferenças do processador, confira este excelente artigo de ArsTechnica.


46



A plataforma de 32 bits e a limitação de 4 GB é um pouco imprópria e é (era) principalmente um limite de design / escolha de arquitetura do sistema operacional. Realmente, os 4GB de 32 bits estão realmente em um limite em um espaço VA de processo. O endereço físico suporta 36 bits nos processadores Intel de 32 bits - Tall Jeff
Você faz um bom argumento que é certamente verdade. Mas o impacto no mundo real dos usuários de PC é que a máquina não vai usar os 4 GB que eles pagaram. Meu pai teve esse problema e ainda está confuso que os 4GB pagos por ele não podem ser totalmente usados.
Aprecie o seu ponto, mas apenas tentando levar a noção de que a correção não está no processador ou indo para 64 bits, é apenas uma questão de um design de SO ligeiramente melhorado. Isso é abordado, por exemplo, nas versões corporativas do Windows, mesmo em versões de 32 bits. Permite 64 GB de RAM. - Tall Jeff
Tecnicamente, o limite não desaparece. Ele se move ainda mais para onde é impraticável / impossível instalar muita RAM em uma máquina a qualquer momento na próxima década, aproximadamente.
Veja meu comentário sobre PAE acima: o limite de 4 GB não é verdadeiro para todo o sistema - mas aplica-se apenas a processos únicos (nenhum processo pode acessar 4 GB ou até a si mesmo), mas todo o sistema, ou seja, todos os processos juntos, pode ser habilitado para PAE). Então, a menos que se tenha aplicativos que lucram com o fato de poder acessar 4 GB ou mais (como editores de vídeo / conversores com grandes arquivos de vídeo) e 8GB + instalado, não deve fazer muita diferença se usar 32bit ou 64bit. - Izzy


Nada é gratuito: embora aplicativos de 64 bits posso acessar mais memória do que os aplicativos de 32 bits, a desvantagem é que eles necessidade mais memória. Todos esses ponteiros que costumavam precisar de 4 bytes, agora eles precisam de 8. Por exemplo, o requisito padrão no Emacs é 60% mais memória quando é construído para uma arquitetura de 64 bits. Essa pegada extra prejudica o desempenho em todos os níveis da hierarquia de memória: executáveis ​​maiores demoram mais para carregar do disco, conjuntos de trabalho maiores causam mais paginação e objetos maiores significam menos ajuste nos caches do processador. Se você pensar em uma CPU com um cache L1 de 16K, um aplicativo de 32 bits pode trabalhar com 4096 ponteiros antes de perder e acessar o cache L2, mas um aplicativo de 64 bits precisa acessar o cache L2 após 2048 ponteiros.

No x64, isso é mitigado por outras melhorias arquiteturais, como mais registros, mas no PowerPC, se seu aplicativo não puder usar> 4G, é provável que ele seja executado mais rapidamente em "ppc" do que em "ppc64". Mesmo na Intel, há cargas de trabalho que são executadas mais rapidamente no x86 e poucas são executadas mais de 5% mais rápido em x64 do que x86.


31



Esta resposta sugere que o PowerPC64 não é tão bom quanto o x86-64. A verdade é que o powerpc64 não melhorou o powerpc, já que o powerpc não foi quebrado. - ctrl-alt-delor
O Linux agora tem uma ABI x32, com todos os benefícios de velocidade do x86-64 (mais registros, ABI redesenhada), mas com ponteiros de 32 bits. +1 por apontar que os benefícios do modo de 64 bits não são do aumento real da largura, mas da chance de descartar grande parte da bagagem que estava retendo a arquitetura. Regs de 64 bits têm valor para algumas aplicações, mas o espaço de ponteiro de 64 bits é menos necessário. - Peter Cordes


Um sistema operacional de 64 bits pode usar mais RAM. É sobre isso, na prática. O Vista / 7 de 64 bits usa recursos de segurança mais sofisticados para onde eles colocam componentes vitais na RAM, mas isso não é realmente "perceptível" como tal.

De ChrisInEdmonton:

Um sistema operacional de 32 bits em um ix86   sistema com PAE pode endereçar até 64   GB de RAM. Um sistema operacional de 64 bits   no x86-64 pode acessar até 256 TB de   espaço de endereço virtual, embora isso possa   ser levantado em processadores subseqüentes,   para 16 EB. Note que alguns   sistemas limitam o espaço de endereço   além disso, e a maioria das placas-mãe   tem restrições adicionais.


19



Para um SO, 32 bits versus 64 bits SOMENTE se refere ao tamanho dos ponteiros (o que seu primeiro parágrafo discute corretamente). -1: Alguns SOs escolhem bloquear o tamanho inteiro padrão para o tamanho do ponteiro, mas nem o Windows nem o Linux fazem isso. A precisão matemática inteira é inalterada. Nenhum SO amplamente utilizado altera a precisão do ponto flutuante (o que o segundo parágrafo afirma). "float" ou "single" é de 32 bits, "double" é de 64 bits, independentemente de o sistema operacional usar ponteiros de 32 bits ou 64 bits. - Mr Fooz
Ah, eu estava claramente enganado, obrigado por esclarecer isso :) - Phoshi
Sem problemas. -1 -> +1 - Mr Fooz
Pode valer a pena editar sua resposta para informar quanto RAM pode ser acessada. Um sistema operacional de 32 bits em um sistema ix86 com PAE pode endereçar até 64 GB de RAM. Um sistema operacional de 64 bits no x86-64 pode acessar até 256 TB de espaço de endereço virtual, embora isso possa ser gerado em processadores subseqüentes, até 16 EB. Observe que alguns sistemas operacionais limitam ainda mais o espaço de endereço e a maioria das placas-mãe terá restrições adicionais. - ChrisInEdmonton
Eu queria manter isso simples, pois os números são na maioria das vezes alto o suficiente para ser irrelevante no momento, mas não pode machucá-lo agora. - Phoshi


Não tenho certeza se posso responder a todas as suas perguntas sem escrever uma redação inteira (há sempre o Google ...), mas você não precisa projetar seus aplicativos de maneira diferente para 64 bits. Eu acho que o que está sendo referido é que você tem que estar ciente de coisas como tamanhos de ponteiro não são mais do mesmo tamanho que ints. E você tem toda uma carga de problemas potenciais com hipóteses embutidas em certos tipos de dados que têm quatro bytes de comprimento que podem não ser mais verdadeiros.

É provável que isso atrapalhe todos os tipos de coisas em seu aplicativo - desde salvar / carregar de arquivo, iterar dados, alinhar dados até operações bit-a-bit em dados. Se você tem uma base de código existente que está tentando migrar ou trabalhar em ambos, é provável que você tenha muitas coisinhas para trabalhar.

Eu acho que isso é um problema de implementação, ao invés de um design. Ou seja Eu acho que o "design" de dizer, um pacote de edição de fotos será o mesmo, seja qual for o tamanho da letra. Nós escrevemos códigos que compilam para versões de 32 e 64 bits, e o design certamente não difere entre os dois - é o mesmo código base.

O "grande negócio" fundamental em 64 bits é que você ganha acesso a um espaço de endereçamento de memória muito maior que 32 bits. Isso significa que você pode realmente colocar mais de 4Gb de memória em seu computador e realmente fazer a diferença.

Tenho certeza de que outras respostas entrarão nos detalhes e se beneficiarão mais do que eu.

Em termos de detectar a diferença, programaticamente, você apenas verifica o tamanho de um ponteiro (por exemplo, sizeof (void *)). A resposta de 4 significa seus 32 bits e 8 significa que você está executando em um ambiente de 64 bits.


14



Se você escrever programas que supõem casualmente que certos tipos de ponteiro são do mesmo tamanho que certos tipos integrais, você está fazendo o mesmo. Isso é verdade há muito tempo. - David Thornley
@ David: Você está absolutamente certo. Infelizmente, há uma tonelada de código que faz exatamente isso.


Um processo de 32 bits possui um espaço de endereços virtuais de 4 GB; isso pode ser muito pouco para alguns aplicativos. Um aplicativo de 64 bits tem um espaço de endereçamento virtualmente ilimitado (claro que é limitado, mas você provavelmente não atingirá esse limite).

No OSX existem outras vantagens. Veja o artigo seguintePor que ter o kernel rodando no espaço de endereçamento de 64 Bits (independente se seu aplicativo roda 64 ou 32) ou ter seu aplicativo rodando em espaço de endereço de 64 Bits (enquanto o kernel ainda é 32 Bits) leva a um desempenho muito melhor. Para resumir: Se qualquer um é de 64 bits (kernel ou aplicativo, ou ambos), o TLB ("buffer de tradução lookaside") não precisa ser liberado sempre que você mudar do kernel para usar espaço e voltar acesso à RAM).

Além disso, você tem ganhos de desempenho ao trabalhar com variáveis ​​"long long int" (variáveis ​​de 64 bits, como uint64_t). Uma CPU de 32 bits pode adicionar / dividir / subtrair / multiplicar dois valores de 64 bits, mas não em uma única operação de hardware. Em vez disso, ele precisa dividir essa operação em duas (ou mais) operações de 32 bits. Assim, um aplicativo que funcione muito com números de 64 bits terá um ganho de velocidade de poder fazer matemática de 64 bits diretamente no hardware.

Por último, mas não menos importante, a arquitetura x86-64 oferece mais registros do que as arquiteturas clássicas x86. Trabalhar com registradores é muito mais rápido do que trabalhar com RAM e quanto mais registros a CPU tiver, menor será a necessidade de trocar valores de registradores para RAM e voltar a registrá-los.

Para descobrir se a sua CPU pode funcionar no modo de 64 bits, você pode olhar para várias variáveis ​​de sysctl. Por exemplo. abra um terminal e digite

sysctl machdep.cpu.extfeatures

Se ele listar EM64T, sua CPU suporta espaço de endereço de 64 bits de acordo com o padrão x86-64. Você também pode procurar

sysctl hw.optional.x86_64

Se ele diz 1 (true / enabled), sua CPU suporta o modo x86-64 Bit, se ele diz 0 (false / disabled), isso não acontece. Se a configuração não for encontrada, considere-a falsa.

Nota: Você também pode buscar variáveis ​​sysctl de dentro de um aplicativo C nativo, sem necessidade de usar a ferramenta de linha de comando. Vejo

man 3 sysctl

10



erro: "machdep.cpu.extfeatures" é uma chave desconhecida
Eu acho que não é chamado EM64T, também, se você não tiver a infelicidade de ter informações.


Observe que o espaço de endereço pode ser usado para mais de memória (real). Também é possível mapear grandes arquivos de memória, o que pode melhorar o desempenho em padrões de acesso mais estranhos, porque o cache de nível de VM mais potente e eficiente entra em ação. Também é mais seguro alocar grandes blocos de memória em 64 bits, pois o gerenciador de heap é menor provavelmente encontrará fragmentação do espaço de endereço que não permitirá alocar um grande bloco.

Algumas das coisas ditas neste tópico (como a duplicação de # registros) aplicam-se apenas a x86-> x86_64, não a 64 bits em geral. Assim como o fato de que, sob x86_64, uma garantia tem SSE2, 686 opcodes e uma maneira barata de fazer PIC. Esses recursos não são estritamente de 64 bits, mas de cortar legado e remediar limitações conhecidas do x86

Além disso, muitas vezes as pessoas apontam para a duplicação de registradores como a causa do aumento de velocidade, enquanto é mais provável que o uso padrão do SSE2 faça o truque (acelerando o memcpy e funções similares). Se você ativar o mesmo conjunto para x86, a diferença será muito menor. (*) (***)

Também tenha em mente que muitas vezes há uma penalidade inicial envolvida porque a estrutura de dados média aumentará simplesmente porque o tamanho de um ponteiro é maior. Isso também tem efeitos de cache, mas é mais significativo no fato de que o memcpy médio () (ou qualquer equivalente para cópia de memória está no seu idioma) levará mais tempo. Isso é apenas na magnitude de alguns por cento, mas as acelerações mencionadas acima também estão nessa magnitude.

Normalmente, a sobrecarga de alinhamento também é maior em arquiteturas de 64 bits (registros anteriormente de 32 bits geralmente se tornam uma combinação de valores de 32 bits e 64 bits), ampliando ainda mais as estruturas.

No geral, meus testes simples indicam que eles se cancelam uns aos outros, se os drivers e as bibliotecas de tempo de execução estiverem totalmente adaptados, não dando diferença significativa de velocidade para o aplicativo médio. No entanto, alguns aplicativos podem ficar mais rápidos de repente (por exemplo, quando dependem de AES) ou mais lentos (a estrutura de dados crucial é constantemente movida / digitalizada / percorrida e contém muitos indicadores). No entanto, os testes estavam no Windows e, portanto, a otimização do PIC não foi comparada.

Observe que a maioria das linguagens JIT-VM (Java, .NET) usa significativamente mais ponteiros em média (internamente) do que, por exemplo, C ++. Provavelmente, o uso de memória deles aumenta mais do que o programa médio, mas não me atrevo a equiparar isso diretamente a efeitos de desaceleração (já que eles são realmente complexos e funky e freqüentemente difíceis de prever sem medir)

(*) um fato pouco conhecido é que o número de registradores SSE também dobra no modo de 64 bits

(**) O dr. Dobbs teve um belo artigo sobre isso alguns anos atrás.


9





Além dos óbvios problemas de memorowos que a maioria das pessoas está mencionando aqui, acho que vale a pena olhar para a noção de "computação em larga escala" que Knuth (entre outros) tem falado ultimamente. Há muita eficiência a ser obtida com a manipulação de bits, e operações bit a bit em uma palavra de 64 bits vão muito além de uma palavra de 32 bits. Em suma, você pode fazer mais operações nos registradores sem ter que acertar a memória e, do ponto de vista de desempenho, essa é uma grande vitória.

Dê uma olhada no Volume 4, pré-fascículo 1A para alguns exemplos dos truques legais que estou falando.


8