Las funciones miembro estáticas en c ++ se copian en varias unidades de traducción?

Tengo una clase auxiliar en mi programa que tiene muchas funciones estáticas utilizadas en diferentes clases de mi programa. P.ej

helper.h:

Class helper {
 public: 
   static void fn1 () 
   { /* defined in header itself */ }

   /* fn2 defined in src file helper.cpp */
   static void fn2(); 
}

Helper solo tiene funciones miembro estáticas. Por lo tanto, ningún otro módulo crea objetos de ayuda. Las funciones auxiliares se utilizan en otros módulos como:

A.cpp

#include "helper.h"
A::foo() {
  helper::fn1(); 
  helper::fn2();
}

B.cpp

#include "helper.h"
B::foo() {
  helper::fn1();
  helper::fn2(); 
}

¿El compilador crea copias separadas de las funciones auxiliares enA.cpp yB.cpp? Leí algunas publicaciones anteriores y deduje de las respuestas que creará el compilador. Pero cuando imprimo la dirección defn1 yfn2 comoprintf("Address of fn1 is %p\n", &helper::fn1); yprintf("Address of fn1 is %p\n", &helper::fn1); de ambosA.cpp yB.cpp, Obtengo la misma dirección. Estoy confundido ahora. Alguien puede aclarar, si me falta algo.

La razón por la que me preocupan las copias múltiples de funciones auxiliares (si sucede) es porque estamos tratando de reducir nuestro tamaño ejecutable y queríamos optimizarlo.

Respuestas a la pregunta(3)

Su respuesta a la pregunta