我的程序中有一个辅助类,它在我的程序的不同类中使用了许多静态函数.例如
helper.h:
Class helper {
public:
static void fn1 ()
{ /* defined in header itself */ }
/* fn2 defined in src file helper.cpp */
static void fn2();
}
Run Code Online (Sandbox Code Playgroud)
Helper只有静态成员函数.因此,其他模块不会创建任何辅助对象.辅助函数用于其他模块,如:
A.cpp
#include "helper.h"
A::foo() {
helper::fn1();
helper::fn2();
}
Run Code Online (Sandbox Code Playgroud)
B.cpp
#include "helper.h"
B::foo() {
helper::fn1();
helper::fn2();
}
Run Code Online (Sandbox Code Playgroud)
编译器是否在A.cpp和中创建了辅助函数的单独副本B.cpp?我读了一些早期的帖子,我从编译器将创建的回复中收集到了.但是,当我打印的地址fn1,并fn2作为printf("Address of fn1 is %p\n", &helper::fn1);与printf("Address of fn1 is %p\n", &helper::fn1);来自A.cpp和B.cpp,我得到了相同的地址.我现在很困惑.有人可以澄清,如果我错过了什么.
我担心辅助函数的多个副本(如果它发生)的原因是我们正在尝试减少我们的可执行文件大小并希望优化它.