저는 현재 레거시 C 코드 (SPICE 변형)를 통합하는 성능이 중요한 응용 프로그램을 개발 중입니다. 다음과 같이레거시 -C C++ 통합
문제는 :
기존 C 코드의 제작자 분명히 인수 전달의 사용은 현대 시대의 위대한 악 중 하나라고 생각했다. 따라서 모든 변수 중 약 90 %가 이 전역 적으로 선언되었습니다.
시뮬레이션 목적으로 레거시 코드를 반복적으로 호출해야하며이 코드 섹션에 대한 동시 호출을 위해 스레드를 사용하면 전체 실행 시간에 도움이됩니다.
내 생각은 레거시 코드를 캡슐화하여 (기존에 g ++ 컴파일을 위해 약간 수정했다.) 많은 뮤텍스 잠금이 필요없는 레거시 코드 용 개체를 여러 개 만들 수 있도록했다. 따라서 전역 변수는 멤버 변수로 캡슐화됩니다.
이로 인해 테이블에 또 다른 문제가 발생했습니다. 레거시 코드 작성자는 또한 전역 변수의 초기화를 믿지 않았습니다. 아마도 C가 0으로 전역 변수를 초기화하는 경향이 있기 때문입니다. C++ 멤버 변수는 동일한 처리를 얻기 위해 솔기가 없습니다. 레거시 C 코드의 올바른 작동을 위해 몇 가지 변수를 0으로 초기화해야합니다. 그러나 이러한 변수를 찾는 것은 방대한 양의 전역 변수가 사용되어 매우 어렵다는 것이 입증되었습니다.
시간이 내가 레거시 C 코드를 어떤 주요도 으로 수정하는 것을 허용하지 않음을 명심하십시오.
- 내가 C 코드의 캡슐화는 약 90 뮤텍스 잠금 사용하는 것보다 빠를 것이라는 가정에서 수정 건가요 다음과 같이
내 질문
은? 초기화되지 않은 멤버 변수 사용을 쉽게 찾을 수 있습니까? (gcc는 자동 변수에 대해서만 이것을 할 수 있음을 이해함). 그래서 중요한 변수 만 초기화 할 수 있습니까?
질문 2 ... 일반 생성자 init 메서드를 사용하지 않고 모든 멤버 변수를 빠르고 깨끗하게 초기화 할 수 있습니까?
또는 (긴 샷) 거기에 프로그램 흐름을 따라갈 수있는 빠른 방법이 있습니다. 그래서 나 자신을 넘어가는 인수를 통합 할 수 있을까요?
어떤 도움을 주시면 감사하겠습니다. N.B.
어느 SPICE 변형하고있는 기능? 귀하의 설명과 일치하지 않는 SPICE3 소스를 간략하게 살펴 보았습니다. –