Pergunta

OGRE3D, por exemplo, usa strings para identificar objetos, então cada vez que o código faz algo em um objeto usando seu nome (uma string), ele tem que fazer operações de string, e como um mecanismo 3D é muito sensível à velocidade, como pode ser um boa maneira de fazer isso?

Quando um computador precisa realizar operações em uma string, ele o faz sequencialmente, bytes após bytes, gastando mais ciclos de CPU se a string for mais longa...

Não seria mais rápido usar nomes de variáveis ​​simples no código em vez de usar identificadores de string?

Foi útil?

Solução 2

Bem, recebi a resposta de um professor:

Na verdade, um identificador de string, uma vez inserido em um mapa assim inserido em ordem, é rapidamente encontrado com uma pesquisa dicotômica.

Outras dicas

Sim, seria mais rápido usar nomes de variáveis ​​simples no código em vez de usar identificadores de string.Mas às vezes você não conhece esses nomes durante a construção.Então você precisa de uma abordagem para lidar com nomes dinamicamente.Uma abordagem alternativa poderia ser apenas usar números inteiros primitivos em vez de strings.Os valores inteiros poderiam ser gerados usando um hash ou uma tabela de pesquisa de strings.Mas usar strings não desaceleraria violentamente o seu programa, a menos que você tenha muitas strings de comprimento muito grande, todas com os mesmos caracteres iniciais e apenas alguns caracteres diferentes no final.Normalmente, a comparação de strings deve levar a um resultado falso relativamente cedo e somente para a "correspondência verdadeira" é necessário comparar as duas strings completamente.Entretanto, a comparação de algumas strings para encontrar objetos dentro de uma estrutura de busca bem organizada (como árvores etc.) não é o gargalo dos motores 3D e, portanto, não deve fazer parte de questões de otimização.

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