Perché la sezione del codice è denominata sezione di testo?

13

La sezione di un eseguibile che contiene codice viene talvolta chiamata la sezione .text . Nelle architetture di memoria segmentate, un segmento mappato come codice viene talvolta chiamato segmento di testo. Il messaggio di errore unix "file di testo occupato" ( ETXTBSY ) significa "questo file è un programma che viene eseguito".

In che modo text viene a significare codice (macchina) eseguibile ?

Una risposta ideale sarebbe: spiegare la connessione tra la parola e il suo significato; fornire una citazione per l'origine o almeno la cronologia del termine; dare un'idea di quali comunità lo usano.

    
posta Gilles 27.10.2012 - 01:31
fonte

1 risposta

5

Il termine deriva dal linguaggio assembly. Non riesco a verificare l'etimologia, ma suppongo che il nome derivi da un altro uso della sezione. Mentre la sezione .data indica le variabili che possono cambiare durante l'esecuzione, la sezione .text contiene dati che non cambiano durante l'esecuzione, consentendo di inserirli nella ROM se necessario. Ciò lo rende utile per il codice, sì, ma lo rende anche utile per le stringhe di testo che non cambiano. Probabilmente è da dove viene il termine.

Per rispondere al commento di Griffin sulle funzioni di prima classe, prendi in considerazione il seguente codice python 3:

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

Il codice che esegui effettivamente per increment finisce per cercare internamente qualcosa del tipo:

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

Quel codice eseguibile può essere inserito nella ROM. Non cambia mai durante l'esecuzione del programma, non importa quante volte chiami counter() . Quello che fa cambia è il puntatore self e le sue variabili membro. Questi devono essere messi in .data . Quando si return increment , si sta effettivamente restituendo una nuova istanza di un oggetto funzione di incremento. Non stai creando dinamicamente un nuovo codice eseguibile ogni volta. Il codice stesso è immutabile anche se il puntatore ad esso non lo è.

L'unico codice che deve essere memorizzato nella sezione .data è quello generato da eval() , perché non è noto al compilatore o al compilatore JIT all'inizio del programma. Tuttavia, anche quel codice è immutabile. Se modifichi la stringa e chiami di nuovo eval() , non stai modificando il codice dal momento in cui hai chiamato eval() , stai creando un nuovo set di codice completamente nuovo.

Sebbene il modello di programmazione possa far sembrare che il codice sia mutabile, il codice di auto modifica effettivo al livello di istruzione del processore è pericoloso e raramente trovato al di fuori degli argomenti voodoo del sistema operativo come il cambio di contesto del processo.

    
risposta data 27.10.2012 - 04:44
fonte

Leggi altre domande sui tag