Der Begriff stammt aus der Assemblersprache. Ich kann die Etymologie nicht verifizieren, aber ich vermute, dass der Name von der anderen Verwendung des Abschnitts stammt. Während der .data
Abschnitt Variablen kennzeichnet, die sich während der Ausführung ändern können, .text
enthält der Abschnitt Daten, die sich während der Ausführung nicht ändern, sodass sie bei Bedarf in das ROM gestellt werden können. Das macht es nützlich für Code, ja, aber es macht es auch nützlich für Textfolgen, die sich nicht ändern. Das ist wahrscheinlich, woher der Begriff kam.
Beachten Sie den folgenden Python 3-Code, um Griffins Kommentar zu erstklassigen Funktionen zu beantworten:
def counter():
x = 0
def increment(y):
nonlocal x
x += y
print(x)
return increment
Der Code, den Sie tatsächlich ausführen increment
, sieht intern ungefähr so aus:
self.func_dict['x'] += y
print(self.func_dict['x'])
Dieser ausführbare Code kann in das ROM geschrieben werden. Es ändert sich nie während der Ausführung des Programms, egal wie oft Sie aufrufen counter()
. Was sich ändert, sind der self
Zeiger und seine Mitgliedsvariablen. Die müssen rein .data
. Wenn Sie dies tun return increment
, geben Sie tatsächlich eine neue Instanz eines Inkrementfunktionsobjekts zurück. Sie erstellen nicht jedes Mal dynamisch neuen ausführbaren Code. Der Code selbst ist unveränderlich, obwohl der Zeiger nicht darauf ist.
Der einzige Code, der in dem Abschnitt gespeichert werden muss , .data
ist der von generierte Code eval()
, da er dem Compiler oder JIT-Compiler beim Start des Programms nicht bekannt ist. Allerdings ist auch dieser Code unveränderlich. Wenn Sie die Zeichenfolge ändern und eval()
erneut aufrufen , ändern Sie den Code nicht gegenüber dem vorherigen Aufruf , sondern eval()
erstellen eine ganz neue Codemenge.
Obwohl das Programmiermodell den Eindruck erweckt, dass Code veränderlich ist, ist der tatsächliche selbstmodifizierende Code auf Prozessoranweisungsebene gefährlich und wird außerhalb von OS Voodoo-Themen wie dem Umschalten des Prozesskontexts selten gefunden.
.text
ist eine Montageanweisung. Versammlung ist Text.