我目前正在开发一个包含遗留 c 代码(SPICE 变体)的性能关键应用程序。
问题如下:
遗留 c 代码的创建者显然认为使用参数传递是现代最大的弊端之一。因此,大约 90% 的变量是全局声明的。
为了模拟目的,必须重复调用遗留代码,并且使用线程并发调用此代码部分将有利于整体执行时间。
我的想法是封装遗留的 c 代码(我已经为 g++ 编译稍作修改),以便可以创建遗留代码的多个对象,从而消除了许多互斥锁的必要性。显然,全局变量将因此被封装为成员变量。
这带来了另一个问题。遗留编码器也不相信全局变量的初始化;可能是因为 C 倾向于将全局变量初始化为 0。但 C++ 成员变量并不能获得相同的处理。一些变量必须初始化为 0 才能正确操作遗留 c 代码。但事实证明,由于使用了大量的全局变量,因此很难找到这些变量。
请记住,时间不允许我对遗留的 c 代码进行任何主要程度的修改。
我的问题如下:
我认为 C 代码的封装会比使用大约 90 个互斥锁更快的假设是否正确?
有没有一种简单的方法可以找到未初始化的成员变量使用?(据我了解 gcc 只能对自动变量执行此操作)。这样我就可以只初始化关键变量?
如果不是问题 2 ...是否有一种快速而干净的方法来初始化所有成员变量而不使用普通的构造函数 init 方法?
或者(长镜头)是否有一种遵循程序流程的快速方法,以便我可以结合自己传递的参数?
任何帮助将不胜感激。注意