La sección de un ejecutable que contiene código a veces se denomina .text
sección. En arquitecturas de memoria segmentada, un segmento asignado como código a veces se denomina segmento de texto. El mensaje de error de Unix "archivo de texto ocupado" ( ETXTBSY
) significa "este archivo es un programa que se está ejecutando".
¿Cómo llegó el texto a significar código ejecutable (máquina) ?
Una respuesta ideal sería: explicar la conexión entre la palabra y su significado; proporcionar una cita para el origen o al menos la historia del término; dar una idea de qué comunidades lo usan.
terminology
history
file-structure
linking
Gilles 'SO- deja de ser malvado'
fuente
fuente
.text
Es una directiva de montaje. Asamblea es texto.Respuestas:
El término proviene del lenguaje ensamblador. No puedo verificar la etimología, pero supongo que el nombre proviene del otro uso de la sección. Mientras que la
.data
sección denota variables que pueden cambiar durante el curso de la ejecución, la.text
sección contiene datos que no cambian durante la ejecución, lo que permite ponerla en ROM si es necesario. Eso lo hace útil para el código, sí, pero también lo hace útil para cadenas de texto que no cambian. Probablemente de ahí proviene el término.Para abordar el comentario de Griffin sobre las funciones de primera clase, considere el siguiente código de Python 3:
El código que realmente ejecuta
increment
termina por verse internamente algo así como:Ese código ejecutable se puede poner en la ROM. Nunca cambia durante la ejecución del programa, sin importar cuántas veces llame
counter()
. Lo que sí cambia es elself
puntero y sus variables miembro. Esos deben ser puestos en.data
. Cuando ustedreturn increment
, en realidad, está devolviendo una nueva instancia de un objeto de función de incremento. No está creando dinámicamente nuevo código ejecutable cada vez. El código en sí es inmutable a pesar de que el puntero no lo es.El único código que debe almacenarse en la
.data
sección es el generado poreval()
, porque no lo conoce el compilador o el compilador JIT al inicio del programa. Sin embargo, incluso ese código es inmutable. Si cambia la cadena yeval()
vuelve a llamar , no está cambiando el código de la vez anterior que llamóeval()
, está creando un conjunto completamente nuevo de código.Aunque el modelo de programación puede hacer que parezca que el código es mutable, el código de auto-modificación real en el nivel de instrucción del procesador es peligroso y rara vez se encuentra fuera de los temas de vudú del sistema operativo como el cambio de contexto del proceso.
fuente