Использование строк для идентификации объектов: в чем цель?

OGRE3D, например, использует строки для идентификации объектов, поэтому каждый раз, когда код делает что-то с объектом, используя его имя (строку), ему приходится выполнять строковые операции, а поскольку 3D-движок очень чувствителен к скорости, как это может быть хороший способ сделать это?

Когда компьютер должен выполнять операции со строкой, он делает это последовательно, байт за байтом, поэтому он тратит больше циклов процессора, если строка длиннее...

Не было бы быстрее использовать в коде простые имена переменных вместо строковых идентификаторов?


person jokoon    schedule 25.10.2010    source источник
comment
Я полностью согласен. @Flinsch прав, что это не является серьезным узким местом в производительности. Более того, это очень усложняет структурирование кода. Мне нравится создавать объекты Mesh и сохранять их в переменных, но вместо этого мне приходится придумывать для них строки. Если вы загружаете файлы с диска, это имеет смысл, но если вы динамически генерируете контент, вам нужно алгоритмически генерировать для них уникальные имена. Это большая головная боль.   -  person mgiuca    schedule 01.12.2010


Ответы (2)


Да, было бы быстрее использовать в коде простые имена переменных вместо строковых идентификаторов. Но иногда вы не знаете этих имен во время сборки. Тогда вам нужен подход к динамической обработке имен. Альтернативный подход может состоять в том, чтобы просто использовать примитивные целые числа вместо строк. Целочисленные значения могут быть сгенерированы с использованием хэша или таблицы поиска строк. Но использование строк не сильно замедлит работу вашей программы, если только у вас нет множества строк очень большой длины, имеющих одинаковые начальные символы и лишь несколько разных символов в конце. Обычно сравнение строк должно приводить к ложному результату относительно рано, и только для «истинного совпадения» необходимо полностью сравнить две строки. Однако сравнение некоторых строк для поиска объектов в хорошо организованной структуре поиска (например, деревьев и т. д.) не является узким местом 3D-движков и, следовательно, не должно быть частью вопросов оптимизации.

person Flinsch    schedule 25.10.2010

Ну, я получил ответ от учителя:

На самом деле строковый идентификатор, однажды вставленный таким образом в карту по порядку, быстро находится с помощью дихотомического поиска.

person jokoon    schedule 04.12.2010