O STL é eficiente o suficiente para dispositivos móveis?

9

Quando se trata de desenvolvimento de jogos para dispositivos móveis no NDK para iOS e Android, alguns desenvolvedores escrevem seus próprios contêineres C ++, enquanto outros afirmam que o STL é mais do que adequado para o desenvolvimento de jogos para dispositivos móveis (por exemplo, o autor da programação do iPhone 3D usa STL em vez de Objective- Em seus exemplos C. Sua defesa é que STL não é mais lento que o Objective-C).

Existem também desenvolvedores móveis que abandonam o C ++ completamente e desenvolvem jogos inteiramente (ou principalmente) na linguagem C (C89 / C90).

Quais são os benefícios e as desvantagens de cada abordagem?

mx2
fonte
4
As principais críticas contra o STL são seus padrões imprevisíveis de alocação de memória e suporte ao compilador - ambos os problemas podem ser resolvidos usando uma alternativa STL, por exemplo, EASTL ou STLPort.
Raphael R.
11
Várias respostas desta pergunta: gamedev.stackexchange.com/questions/268/… tocam em plataformas móveis e devem fornecer sua resposta.
Tetrad
5
Suspeito que para muitas pessoas que "abandonam" (mais parecido, nunca usam) o C ++ em plataformas móveis, trata-se menos de STL e mais do constrangimento do Objective-C ++ (e o suporte ao C ++ geralmente está atrasado na cadeia de ferramentas da Apple).
A verdadeira questão é: você pode escrever melhor? É melhor entender o STL; e nos casos em que não faz o que você deseja, implementando o comportamento que você exige.
Deceleratedcaviar

Respostas:

6

Deixe-me dizer uma coisa primeiro. C ++ é mais rápido que chamadas de Objective-C. O Objective-C usa sistemas de passagem de mensagens, portanto, haverá uma sobrecarga de tempo de execução quando comparado ao C ++. Basta dar uma olhada em algumas das comparações aqui .

Chegando ao desenvolvimento geral de "aplicativos" para iOS, faz sentido usar as funções internas do Objective-C, pois o desempenho não pode ser um grande critério, até certo ponto. Mas no desenvolvimento de jogos, precisamos considerar esses resultados.

Quando eu estava trabalhando no meu projeto anterior (Robokill), otimizamos a maior parte do código sempre que necessário com chamadas em C simples (convertemos nossa classe de partículas Objective-C para uma classe C ++). Ou você pode até usar as funções de tempo de execução do Objective-C para chamadas diretas em C.

Chegando à sua pergunta, eis a minha resposta: sim, o STL está bem otimizado para sua finalidade . Embora o código de implementação não seja muito legível, é interessante verificar a implementação uma vez.

No entanto, podemos otimizar o código Objecive-C até certo ponto, pré-armazenando em cache os ponteiros de função e fazendo chamadas com o tempo de execução Objective-C.

Espero que isto ajude!

Ayyappa
fonte