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