¿Por qué la sección de código se denomina sección de texto?

13

La sección de un ejecutable que contiene código a veces se llama la sección .text . En las arquitecturas de memoria segmentada, un segmento mapeado 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".

¿Qué significa texto para 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 utilizan.

    
pregunta Gilles 27.10.2012 - 01:31

1 respuesta

5

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 sección .data denota variables que pueden cambiar durante el curso de la ejecución, la sección .text contiene datos que no cambian durante la ejecución, lo que permite colocarla en la ROM si es necesario. Eso lo hace útil para el código, sí, pero también lo hace para cadenas de texto que no cambian. Probablemente de ahí viene el término.

Para abordar el comentario de Griffin sobre las funciones de primera clase, considere el siguiente código de Python 3:

def counter():
    x = 0
    def increment(y):
        nonlocal x
        x += y
        print(x)
    return increment

El código que ejecutas para increment termina buscando internamente algo así como:

self.func_dict['x'] += y
print(self.func_dict['x'])

Ese código ejecutable se puede poner en ROM. Nunca cambia a lo largo de la ejecución del programa, sin importar cuántas veces llame a counter() . Lo que hace cambia es el puntero self y sus variables miembro. Los que se deben poner en .data . Cuando return increment , en realidad está devolviendo una nueva instancia de un objeto de función de incremento. No estás creando dinámicamente un nuevo código ejecutable cada vez. El código en sí es inmutable, aunque el puntero no lo sea.

El único código que debe debe almacenarse en la sección .data es el generado por eval() , porque el compilador o el compilador JIT no lo conocen al inicio del programa. Sin embargo, incluso ese código es inmutable. Si cambias la cadena y vuelves a llamar a eval() , no estás cambiando el código de la vez anterior a la que llamaste a eval() , estás creando un nuevo conjunto de códigos.

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 SO como el cambio de contexto de proceso.     

respondido por el Karl Bielefeldt 27.10.2012 - 04:44

Lea otras preguntas en las etiquetas