Я оптимизирую производительность некоторых кодов и обнаружил, что вызов func()
в сторонней общей библиотеке выполняется слишком медленно каждые несколько минут. Например, если я звонил 10 раз в цикле, первый вызов был очень медленным по сравнению с другими вызовами. Через несколько минут я повторил ту же операцию и получил тот же результат. Я подозреваю, что основной причиной является отсутствие кэша (данные и инструкции). Поэтому, если я смогу загрузить инструкции в кэш до вызова этой функции, возможно, первый вызов этой функции будет быстрее, чем раньше.
Я планирую использовать memcpy()
для доступа к адресу func()
перед его вызовом. Но проблема в том, что func()
вызывает другие функции, которые также определены в разделяемой библиотеке, и я не могу получить доступ к адресу этих функций.
Согласно этому вопросу: Как заставить backtrace () / backtrace_symbols () печатать имена функций? , я знаю, backtrace()
/ backtrace_symbols()
можно использовать для печати стека backtrace, но так ли это возможна ли обратная трассировка стека печати при вызове функции в сторонней общей библиотеке?
Кстати: я был бы признателен за любые советы и предложения по предварительной загрузке инструкций для кэширования.