В настоящее время я работаю над критичным к производительности приложением, которое включает
старый код c (вариант SPICE).
Проблема заключается в следующем:
Создатели унаследованного кода c, по-видимому, полагали, что использование
Передача аргументов - одно из величайших бед современности. Таким образом, около 90%
из всех переменных были объявлены глобально.
Устаревший код должен вызываться повторно для целей моделирования, и было бы очевидно, что использование потоков для одновременных вызовов этого раздела кода будет полезным для общего времени выполнения.
Моя идея заключалась в том, чтобы инкапсулировать унаследованный код c (который я уже немного изменил для компиляции g ++), чтобы можно было создать несколько объектов для унаследованного кода, устраняя необходимость во многих мьютексных блокировках. Очевидно, что глобальные переменные, таким образом, будут инкапсулированы как переменные-члены.
Это принесло еще одну проблему на стол. Устаревшие кодеры также не верили в инициализацию глобальных переменных; вероятно, поскольку C склонны инициализировать глобальные переменные в 0.
Переменные-члены C ++ не сшиваются, чтобы получить ту же обработку, хотя. Несколько переменных должны быть инициализированы в 0 для правильной работы устаревшего кода c. Но найти эти переменные оказалось довольно сложно из-за огромного количества используемых глобальных переменных.
Пожалуйста, имейте в виду, что время не позволяет мне модифицировать устаревший код c для любых основных
степень.
У меня следующие вопросы:
Я прав в предположении, что инкапсуляция кода C будет быстрее
чем использовать около 90 мьютексных замков?
Существует ли простой способ найти использование неинициализированной переменной-члена? (Как я понимаю, gcc может делать это только для автоматических переменных). Чтобы я мог инициализировать только критические переменные?
Если нет, вопрос 2 ... существует ли быстрый и понятный способ инициализации всех переменных-членов без использования обычного метода init конструктора?
Или (длинный выстрел) есть ли быстрый способ следить за ходом программы, чтобы я мог включить передачу аргумента самому себе?
Любая помощь будет высоко оценена.
Нотабене