Копируются ли статические функции-члены в C ++ в нескольких единицах перевода?

У меня есть вспомогательный класс в моей программе, который имеет множество статических функций, используемых в разных классах моей программы. Например,

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 , я получаю то же самое адрес. Теперь я смущен. Может кто-нибудь уточнить, если я что-то упускаю.

Причина, по которой меня беспокоят множественные копии вспомогательных функций (если это произойдет), заключается в том, что мы пытаемся уменьшить размер нашего исполняемого файла и хотим его оптимизировать.

8
задан sth 20 March 2011 в 22:54
поделиться