Я пытаюсь написать синтаксический анализатор для больших (650 МБ +) файлов волнового фронта .obj, используя отображение памяти (cpp-mmf), но поскольку к самому отображенному файлу обращаются через const char *, я не могу использовать std :: string и егометоды (если только я не хотел скопировать все это в надлежащую память, что отрицательно сказывается на назначении памяти).
Указанные файлы .obj содержат триангулированные и развернутые модели, поэтому их структура всегда следует одной и той же схеме:
...
v -0.723607 0.447220 -0.525725
v 0.276388 0.447220 -0.850649
v 0.894426 0.447216 0.000000
v 0.000000 1.000000 0.000000
...
vt 0.519353 0.318304
vt 0.518998 0.318304
vt 0.518643 0.318304
vt 0.518288 0.318304
...
vn -0.3764 0.8831 0.2800
vn -0.3757 0.8831 0.2810
vn -0.3744 0.8837 0.2809
vn -0.3737 0.8837 0.2819
...
f 17358/3085/4563 14895/3086/4563 14894/3023/4563
f 13746/176/4564 17359/179/4564 17296/177/4564
f 17359/179/4565 17360/3087/4565 17296/177/4565
f 17296/177/4566 17360/3087/4566 17297/3024/4566
Таким образом, константы здесь представляют собой числа в одной строке, и тот факт, что только числа с префиксом «vt» будут одинаковой длины.
Мои вопросы:
- Должен ли я просмотреть файл, рассчитать необходимую память на основе количества префиксов и использовать malloc () / calloc () или просто не беспокоиться ииспользовать векторы?
- Является ли strtof / strtol лучшим выбором для преобразования чисел в float / int или есть что-то более эффективное?
- Эти три индекса разделены / внизучасто дубликаты.Как мне копировать только уникальные?