A execução de uma versão de 32 bits do ImageMagick resultará em metade do uso de memória de uma versão de 64 bits?

1

Estou usando o ImageMagick para processar imagens TIFF grandes e estou tendo problemas de memória, pois o processamento acontece em um ambiente de recursos limitados (Função Computar no Alibaba, que é quase idêntico ao AWS Lambda). Às vezes, o processo fica sem memória e, às vezes, fica sem espaço em disco temporário.

Acredito que estou usando atualmente uma versão de 64 bits do convert binário do ImageMagick. Se eu fosse para compilar personalizado o binário do ImageMagick em 32 bits, há uma alteração no meu processamento de imagem que poderia usar metade da memória?

Eu acredito que a resposta é não, mas eu só quero verificar novamente. Meu palpite é que o binário convert carregado na memória será simplesmente a metade do tamanho, e o processamento real da imagem usará a mesma quantidade de memória de quando usar uma versão de 64 bits de convert .

    
por Chad Johnson 06.07.2018 / 21:29

2 respostas

4

Programas de 64 bits versus 32 bits geralmente afetam apenas a quantidade de memória que o programa pode endereçar diretamente. Os próprios programas podem não ocupar muito mais espaço na memória do que uma pequena quantia para o tamanho das variáveis dentro dos programas. IE: um int em um programa C em binários de 32 bits tem um valor máximo de cerca de 2 bilhões; um int em binários de 64 bits tem um valor máximo de 9.223.372.036.854.780.000. Agora, um programa de 64 bits pode ler ou processar dados em um espaço de memória muito maior, mas o próprio programa não usa muito mais memória.

Resposta curta: o binário de 32 bits não ajudará se você estiver processando um arquivo de dados grande.

    
por 06.07.2018 / 22:15
3

Bem, 64 bits versus 32 bits altera o uso da memória de tempo de execução um pouco, pois altera o tamanho de ponteiros . Em amd64 , um int (o tipo inteiro padrão) ainda é de 32 bits, portanto isso não muda. Mas um programa que usa estruturas de dados pesadas com ponteiros, como árvores ou listas vinculadas; ou um intérprete de linguagem de alto nível que acessa todas as variáveis através de ponteiros, pode ser afetado. Ter um ponteiro de 64 bits para uma estrutura de 128 bits (digamos) terá uma sobrecarga de 50%, enquanto que com ponteiros de 32 bits é de apenas 25%.

Exatamente por causa do tamanho do ponteiro, na verdade, há uma especificação ABI para usar aplicativos de 32 bits em sistemas amd64 de 64 bits, mas não acredito que tenha recebido muita tração. Veja x32 ABI na Wikipedia.

Como o ImageMagick lida com dados de imagem, que são principalmente apenas conjuntos de números, provavelmente não afetará muito.

    
por 07.07.2018 / 00:11