Сравнение производительности между libC++ и libstdC++ в Linux
Есть ли полное сравнение производительности между двумя стандартными библиотеками в Linux?
Я долго искал, но ничего не нашел.
Компилятор будет clang
, как libc++
в Linux работает только с clang
,
libc++
не является полной функцией в Linux (exception_ptr
пока не реализовано, но это меня не касается). С другой стороны, он имеет больше возможностей C++11/14, чем libstdc++
есть. Более новые версии libstdc++
обеспечивает большую поддержку (например, regex
в GCC 4.9), но как-то сложно спросить clang
использовать более новую версию, отличную от дистрибутива по умолчанию. Это можно сделать, но я не нашел ни одного некрасивого решения.
Легче установить новый GCC в определенном месте и создать исполняемые файлы для связи с более новым libstdc++
, но я не понимаю, как можно иметь exec, чтобы выбрать новую библиотеку во время выполнения, не вставляя новую библиотеку в LD_LIBRARY_PATH
, который изменяет поведение всего в системе, которая использует C++. RPATH
это возможное решение, но все же я думаю, что оно довольно уродливо и, возможно, я ошибаюсь, оно также меняет поведение других библиотек, на которые ссылается тот же исполняемый файл.
Это главная причина, по которой я хочу перейти на libc++
(лучшая поддержка C++11/14 без возни с системными исполняемыми файлами, старые libstdc++
связан только для поддержки ABI). Тем не менее, я обеспокоен производительностью. Просто несколько вещей, которые мне нравится видеть в сравнении производительности (другая причина в том, что я обнаружил ошибки libc++
намного проще чтение libc++
Источник, когда ошибка возникает довольно приятно, кодирование очень аккуратно, при чтении libstdc++
Источник, я обнаружил, что я заблудился более чем часто):
- Контейнер STL, в основном
vector
, спектакль (resize
,push_back
и т. д. иногда их просто не избежать) - Числовые библиотеки, в основном
<random>
(<cmath>
не имеет значения, что я считаю, что две библиотеки не имеют разницы, поскольку это просто зависит от системыlibm
, который является чрезвычайно медленным и устаревшим в Linux, и я не используюglibc
математическая библиотека в любом случае) <algorithm>
,std::copy
,std::fill
и т.д. Опять же, иногда вы просто не можете их избежать (в основном, когда интерфейс, который вы хотите предоставить, является универсальным, и вы не хотите специализировать каждую функцию для указателей, чтобы явно вызыватьmemset
так далее.). Поэтому будет лучше узнать, достаточно ли высока производительность библиотек для этих функций (например, достаточно ли низкие затраты на реализацию, чтобы компилятор мог видеть, что происходит, и, таким образом, мог выполнять определенную оптимизацию, возможную только для указателей. Я думаю, это также зависит на реализацию STL итераторов).