En general no es sencillo compilar de una sola pasada, por varias razones.
Okay... entonces de aqui viene.
- Hay referencias que no se han resulto, se guardan datos intermedios y en otra fase se termina de verificar.
¿te refieres con esto a que en el proceso las direcciones varian y al mismo tiempo y por el mismo son ajustadas?
- El código es tan grande que la memoria no puede albergar todo el proyecto en memoria.
Los archivos COM, son de cuando los programas eran tan pequeñitos que cabían en un unico sector (no más de 64kb.). Eso implicaba que las direcciones podían ser consideradas absolutas, si se cargaban en un sector siendo la dirección absoluta real la dirección del sector + el desplazamiento en el sector. Eso mismo supone ciertas restricciones, a cambio de una carga más rápida (no hay que traducir las direcciones que ya tiene el COM).
Un exe, en cambio puede tener cualquier tamaño, y exige que durante la carga todas sus direcciones sean modificadas (una vez cargado en memoria), conforme al valor que contienen y al punto en memoria que fueron cargados... eso supone una cierta lentitud en la carga en memoria (el loader), a su vez se libera de ciertos rigores como el tamaño limitado o los saltos...
En fin, la diferencia básica se limita a la velocidad de carga que hoy es despreciable peroq ue en los 70-80 podría suponer una gran diferencia dada la velocidad de ejecución d elos procesadores de entonces.
Cuando la velocidad de los procesadores se disparó y el tamaño de la memoria siguió el mismo camino, los programas COM, básdicamente quedaron obsoletos (pués ya más que ventajas ofrecen restricciones)
Imagino que estamos hablando de la relacion entre la velocidad de acceso al disco y a la memoria.
Sin embargo, asi como un archivo COM es limitado por su estructura, ¿un EXE no debe ser igualmente no mayor al rango del registro de segmento de codigo? (Si vamos al caso)
Lo siento he tachado esa parte final, porque tú sabrás que 'cuestiones superficiales' conoces, yo no sé cuales son, y creo que nadie más que tú lo sepa... ni si son correctas o sesgadas, es asumir...sin conocimiento de causa.
Es decir, como dije cuando introduje mis preguntas, lo que tiene que decir Wikipedia (como antonomasia de
las definiciones generales).
De hecho me he preguntado varias veces como seria el codigo fuente de un compilador. Gracias por tu tiempo.
No suele haber tales referencias.
Y eso temia. En realidad es solo curiosidad.
Link es enlace, linking, es enlazar... Se trata de hacer que todos esos ficheros de código individuales sean uno solo, pero no se trata de eso solo, también (y sobretodo) se trata de otorgar las direcciones de memoria relativa dentro del código (el cargador del ejecutable durante la ejecución tomará las direcciones relativas y las transformará en direccioes absolutas en la memoria, aunque no es exactamente así...
¿Te refieres con esto, como pregunte antes, a que al momento de unir los archivos las direcciones varian y el
enlazador debe encargarse de a su vez ajustarlas?
Ademas me pregunto si justamente a eso te refieres con lo que dices en seguida.
Gracias por responder.