Software:
News ToolsReg Shops |
The Register » Software » Binary interfaces in component developmentA template class with static data - how can that possibly go wrong?Published Thursday 11th October 2007 08:02 GMT In the next example (see Figure 2) the code is logically and textually identical apart from the usual
So what has happened here? Earlier we noted that a C++ compiler would (with few exceptions) instantiate a class template and its member functions when it’s specialised and the template definitions for the member functions are available. The Windows behaviour is that both A and B are dlls, making calls to member functions in our singleton class. The template definitions are in the header file and hence always available (they are always instantiated). As a result, both A.dll and B.dll contain a definition for our static variable. However, if we try to confirm this by using the
Figure 3: Dumpbin of all dll information
(N.B. no mention of our static variable!).
D:\ …\code\somemodularexe\Release>dumpbin /all DynLibUsingSingletonA.dll
SECTION HEADER #1
.text name
119ED virtual size
1000 virtual address (10001000 to 100129EC)
12000 size of raw data
1000 file pointer to raw data (00001000 to 00012FFF)
0 file pointer to relocation table
0 file pointer to line numbers
0 number of relocations
0 number of line numbers
60000020 flags
Code
Execute Read
RAW DATA #1
10001000: C7 01 B4 31 01 10 E9 17 2D 00 00 CC CC CC CC CC Ç.´1..é.-..ÌÌÌÌÌ
10001010: 56 8B F1 C7 06 B4 31 01 10 E8 04 2D 00 00 F6 44 V.ñÇ.´1..è.-..öD
10001020: 24 08 01 74 09 56 E8 D9 2D 00 00 83 C4 04 8B C6 $..t.VèÙ-...Ä..Æ
10001030: 5E C2 04 00 CC CC CC CC CC CC CC CC CC CC CC CC ^Â..ÌÌÌÌÌÌÌÌÌÌÌÌ
10001040: 8B 44 24 10 8B 4C 24 0C 8B 54 24 08 56 8B 74 24 .D$..L$..T$.V.t$
… …. …
Figure 4: Linker map output showing variable definition. 0004:00001b60 ?myNsExportedVar@A@@3HA 100b2b60 A.obj 0004:00001b64 ?m_instance@?$GenericSingleton@VMySingletonObject@@@@0VMySingletonObject@@A The reason we can’t see the static objects in the dumpbin report is that in our example we haven’t tagged the instantiated objects of static duration as
Track this type of story as a custom Atom/RSS feed or by email.
|
|
||||||||
Top 20 stories • All The Week’s Headlines • Archive • Search