c++ - tener - ¿Para qué se utiliza la sección COMDAT?
longitud title (2)
La opción / Gy es buena para usarse en versiones de lanzamiento. Debido a que cada función tiene su propia sección, el enlazador puede eliminar cualquier pieza de código no utilizada. Si no especifica la opción / Gy obtendrá algo como esto: "a.cpp" define 3 funciones y el compilador las coloca en una sección de código al compilar. "main.cpp" usa solo una función de "a.cpp", pero al vincular todas las funciones de "a.cpp" estará vinculada (dos de ellas como una carga). Y si cada función tuviera su propia sección, el enlazador podría seleccionar solo una que contenga la función que necesita "main.cpp". La compilación de la opción / Gy es buena para las construcciones de depuración. Al compilar una clase, todos sus métodos obtienen sus propias secciones separadas de forma predeterminada.
Veo la opción / Gy y me pregunto por qué lo usaría. http://msdn.microsoft.com/en-us/library/xsa71f43.aspx
La respuesta actualmente aceptada es algo incompleta.
El propósito de una sección COMDAT es permitir que las secciones "duplicadas" se definan en múltiples archivos de objetos. Normalmente, si se define el mismo símbolo en varios archivos de objetos, el vinculador informará los errores. Esto puede causar problemas para algunas características del lenguaje C ++, como las plantillas, que pueden crear una instancia de los mismos símbolos en diferentes archivos cpp.
Las secciones de COMDAT se utilizan para evitar esto. Cuando una sección está marcada como COMDAT en un archivo de objeto, también especifica un indicador que indica cómo se deben resolver los conflictos. Hay un montón de opciones, que incluyen "simplemente elige a quien quieras", "asegúrate de que todos los dups. Sean del mismo tamaño", "asegúrate de que todos los dups. Tengan el mismo contenido", "elige el más grande", etc. Consulta La especificación COFF para una lista completa.
En cualquier caso, a diferencia de lo que dice la respuesta actualmente aceptada , no hay requisitos, de una manera u otra, sobre lo que debe ser el contenido de una sección de COMDAT. Pueden contener un procedimiento, muchos procedimientos, datos o cualquier combinación de código y datos.