Я портирую некоторые приложения из wchar_t для строк C на char16_t, предлагаемые C ++ 11.
Хотя у меня есть проблема. Единственная найденная мной библиотека, которая может обрабатывать snprintf для типов char16_t, — это ICU с их типами UChar.
Производительность u_snprintf_u (эквивалентна swprintf / snprintf, но с использованием Uchar в качестве аргументов) ужасна.
Некоторое тестирование приводит к тому, что u_snprintf_u в 25 раз медленнее, чем snprintf.
Пример того, что я получаю на valgrind:
Как видите, базовый код выполняет слишком много работы и создает экземпляры внутренних объектов, которые мне не нужны.
Редактировать: данные, с которыми я работаю, не должны интерпретироваться базовым кодом ICU. Это ascii ориентировано. Я не нашел способа сказать ICU не пытаться применять локали и тому подобное к таким вызовам функций.
Задача ещё не решена.
Других решений пока нет …