¿Qué es el "enlace incremental"?


105

He mirado el MSDN de Microsoft y toda la web, pero todavía no he podido tener una idea muy clara de qué es.

¿Significa que el programa completo carga los archivos DLL en diferentes momentos durante su ejecución, como ocurre con todos a la vez al iniciarse?

¿Estoy totalmente fuera de lugar? :)


1
Agregué una respuesta para GNU ld pero se eliminó, aquí hay una similar: stackoverflow.com/questions/29391965/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Se eliminó porque Copiar, Pegar y Diverger es malo, no importa qué tan bueno sea el contenido en.wikipedia.org/wiki/Don%27t_repeat_yourself
MarcH

Respuestas:


122

La vinculación implica empaquetar todos los archivos .obj creados a partir de sus archivos fuente, así como cualquier archivo .lib al que haga referencia, en su salida (por ejemplo, .exe o .dll).

Sin vinculación incremental, esto debe hacerse desde cero cada vez.

La vinculación incremental vincula su exe / dll de una manera que facilita que el vinculador actualice el exe / dll existente cuando realiza un pequeño cambio y vuelve a compilar.

Por lo tanto, la vinculación incremental solo hace que sea más rápido compilar y vincular su proyecto.

El único efecto de tiempo de ejecución que puede tener es que puede hacer que su exe / dll sea un poco más grande y más lento, como se describe aquí:

http://msdn.microsoft.com/en-us/library/4khtbfyf.aspx

Editar: como lo mencionó Logan, el enlace incremental también es incompatible con la generación de código de tiempo de enlace , por lo que se pierde una posible optimización del rendimiento.

Es posible que desee utilizar un enlace incremental para depurar compilaciones para acelerar el desarrollo, pero deshabilítelo para versiones de versiones para mejorar el rendimiento en tiempo de ejecución.

Las DLL cargadas con retraso pueden ser lo que está pensando:

http://msdn.microsoft.com/en-us/library/151kt790.aspx


¡Ah, pensé que los enlazadores siempre hacían esto de todos modos! Entonces, ¿apagar incremental linkinghará que el enlazador vincule todo desde cero cada vez?
Russel

6
"En la práctica, probablemente no valga la pena preocuparse por el efecto de esto". Probablemente valga la pena mencionar que si bien la diferencia entre el enlace "normal" y el enlace incremental puede no ser tan grande en cuanto al rendimiento en tiempo de ejecución, el enlace incremental es incompatible con la generación de código en tiempo de enlace, lo que puede marcar una diferencia drástica en el rendimiento.
Logan Capaldo

2
@Russel: Sí, lo hará. @Logan: Gracias, he actualizado mi respuesta.
Saxon Druce

Entonces, ¿eso significa que deberíamos desactivar esta opción para las compilaciones de producción?
RBT

1
@RBT, sí, debes hacerlo.
Ajay

15

Además, lo que es más importante, el enlace incremental es un requisito previo para la Edit&Continueposibilidad de editar el código y recompilarlo sobre la marcha, sin reiniciar.

Por lo tanto, es bueno tener versiones de depuración, pero no versiones de lanzamiento.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.