コードセクションがテキストセクションと呼ばれるのはなぜですか?


14

コードを含む実行可能ファイルのセクションは、.textセクションと呼ばれることもあります。セグメント化されたメモリアーキテクチャでは、コードとしてマップされたセグメントは、テキストセグメントと呼ばれることもあります。UNIXエラーメッセージ「text file busy」(ETXTBSY)は、「このファイルは実行中のプログラムです」を意味します。

テキストはどのように実行可能(マシン)コードを意味するようになりましたか?

理想的な答えは次のとおりです。単語とその意味の関係を説明します。用語の起源または少なくとも歴史の引用を提供する; どのコミュニティがそれを使用しているのかを考えてください。


.textアセンブリディレクティブです。アセンブリはテキストです。
オースティンヘンリー

6
同様の質問を尋ねた3年前のStackOverflowに答えた: stackoverflow.com/questions/1282506/...
スティーブンCを

@StephenCリンクをありがとう。「テキストセグメント」をグーグルで探すと簡単に見つかりますが、ほとんどの場合「テキストセクション」で試しましたが、表示されませんでした。そのため、少なくともGEの時代にまでさかのぼりますが、その意味がどのように確立されたかはまだ明らかではありません。
ジル「SO-悪であるのをやめる」

回答:


5

この用語はアセンブリ言語に由来します。語源を確認することはできませんが、私の推測では、この名前はセクションの他の使用法に由来していると思われます。.dataセクションは実行中に変化する可能性のある変数を示しますが、セクションには実行.text中に変化しないデータが含まれており、必要に応じてROMに入れることができます。そうすると、コードにとっては便利ですが、変更されないテキストの文字列にとっても便利です。それはおそらく用語の由来です。

ファーストクラス関数に関するGriffinのコメントに対処するには、次のPython 3コードを検討してください。

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

実際に実行するコードは、increment内部的に次のようになります。

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

その実行可能コードはROMに入れることができます。呼び出し回数に関係なく、プログラムの実行中に変更されることはありませんcounter()。何変更することでselfポインタとそのメンバ変数。それらを入れる必要があります.data。の場合return increment、実際にはインクリメント関数オブジェクトの新しいインスタンスを返しています。毎回新しい実行可能コードを動的に作成しているわけではありません。コードへのポインタがそうでなくても、コード自体は不変です。

セクションに格納する必要があるコードは、プログラムの開始時にコンパイラーまたはJITコンパイラーに.data認識されeval()ないため、によって生成されるコードのみです。ただし、そのコードでさえ不変です。文字列を変更してeval()再度呼び出すと、前回呼び出したときのコードは変更されずeval()、まったく新しいコードセットが作成されます。

プログラミングモデルは、コードが変更可能であるように感じるかもしれませんが、プロセッサ命令レベルでの実際の自己修正コードは危険であり、プロセスコンテキストスイッチングなどのOSブードゥートピック以外ではめったに見つかりません。


では、コードが可変/ 1クラスであることを考慮して関数型言語を使用している場合はどうなりますか?
グリフィン

1
ファーストクラスの機能についての私の編集をご覧ください。
カールビーレフェルト
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.