tags:

views:

353

answers:

2

I see the /Gy option and am wondering why I would use it? http://msdn.microsoft.com/en-us/library/xsa71f43.aspx

A: 

See http://stackoverflow.com/questions/629894.

Basically each function gets its own section in the object rather than just a huge block of code being generated. COMDAT is just the section type that's used when generating sections for individual functions.

Tim Sylvester
+3  A: 

The other answer here is some what incomplete.

The pupose of a COMDAT section is to allow "duplicate" sections to be defined in multiple object files. Normally, if the same symbol is defined in multiple object files, the linker will report errors. This can cause problems for some C++ language features, like templates, that may instantiate the same symbols in different cpp files.

COMDAT sections are used to get around this. When a section is marked as a COMDAT in an object file, it also specifies a flag that indicates how conflicts should be resolved. There are a bunch of options, including "just pick anyone you like", "make sure all dups. are the same size", "make sure all dups. have the same content", "pick the largest one", etc. See the COFF spec for a complete list.

In any case, unlike what the other answer said, there's no requirements, one way or the other, on what the contents of a COMDAT section has to be. They can contain one procedure, many procedures, data, or any combination of both code and data.

-Scott

Scott Wisniewski