Digamos que compilo un código y lo hago ejecutar. Tardará 10 minutos en terminar.
Mientras tanto, si cambio algunos parámetros en el código y lo vuelvo a compilar usando una ventana de terminal separada y lo ejecuto también (por lo que ahora hay dos programas ejecutándose simultáneamente usando el mismo código), ¿la segunda ejecución afecta al primer programa en ejecución como el la primera salida compilada se reemplaza por la segunda salida compilada?
El comportamiento no está definido por el estándar C++. En general, sucederá una de dos cosas (depende principalmente del sistema operativo)
La segunda compilación fallará porque el enlazador no podrá abrir el archivo ejecutable para escribir en él.
La compilación tendrá éxito y las invocaciones existentes del ejecutable original no se verán afectadas; las invocaciones posteriores utilizarán el nuevo ejecutable.
La tercera posibilidad, la compilación tiene éxito y estropea las invocaciones existentes, es inaudita en los sistemas operativos modernos.
La única respuesta razonable es que el comportamiento depende completamente del sistema operativo: el estándar C++ no intenta describir lo que podría suceder.
Su proveedor de sistema operativo puede extender la cortesía común de documentar o especificar el comportamiento, pero nunca he visto tal documentación.
Su mejor apuesta es no intentar esto.
Soy un gato viejo, aquí hay algunas reflexiones. Es poco probable que pueda hacer esto en Windows debido al bloqueo de archivos. En las estaciones de trabajo Sun es posible, pero el programa no parece funcionar del todo bien una vez que se compila en la misma ubicación que un ejecutable en ejecución. Bueno, ciertamente era así cuando estaba en la universidad usando C++ preestandarizado. Simplemente se comportó de manera extraña y no hay explicación para ello. En rhel parece funcionar bien para programas pequeños en particular.
Hay tres escenarios posibles:
En Windows, un archivo ejecutable se bloqueará para escribirlo y eliminarlo mientras se ejecuta, por lo que la compilación simplemente fallará.
En Linux, un archivo ejecutable no está necesariamente protegido contra modificación o eliminación mientras se ejecuta.
2.1. Si se elimina un archivo del sistema de archivos y luego se crea un nuevo archivo con el mismo nombre, el contenido del archivo anterior permanecerá hasta que el ejecutable en ejecución finalice, mientras que el nuevo ejecutable usará el nuevo archivo. Entonces, el ejecutable anterior continuará ejecutándose normalmente mientras que el nuevo también estará listo para funcionar.
2.2. Si un archivo se abre para escribir y se sobrescribe con contenido nuevo, el ejecutable que ya se está ejecutando utilizará el nuevo código de máquina, que probablemente sea incompatible con el estado del programa existente y provocará fallas.