У меня есть вспомогательный класс в моей программе, который имеет множество статических функций, используемых в разных классах моей программы. Например,
helper.h
:
Class helper {
public:
static void fn1 ()
{ /* defined in header itself */ }
/* fn2 defined in src file helper.cpp */
static void fn2();
}
Помощник имеет только статические функции-члены. Таким образом, никакие объекты-помощники не создаются другими модулями. Вспомогательные функции используются в других модулях, например:
A.cpp
#include "helper.h"
A::foo() {
helper::fn1();
helper::fn2();
}
B. cpp
#include "helper.h"
B::foo() {
helper::fn1();
helper::fn2();
}
Создает ли компилятор отдельные копии вспомогательных функций в A.cpp
и B.cpp
? Я прочитал несколько более ранних постов и понял из ответов, что компилятор так создаст. Но когда я печатаю адрес fn1
и fn2
как printf («Адрес fn1 -% p \ n», & helper :: fn1);
и printf ("Адрес fn1% p \ n", & helper :: fn1);
из обоих A.cpp
и B.cpp
, я получаю то же самое адрес. Теперь я смущен. Может кто-нибудь уточнить, если я что-то упускаю.
Причина, по которой меня беспокоят множественные копии вспомогательных функций (если это произойдет), заключается в том, что мы пытаемся уменьшить размер нашего исполняемого файла и хотим его оптимизировать.