Раздел исполняемого файла, который содержит код, иногда называется .text
разделом. В архитектурах с сегментированной памятью сегмент, отображаемый как код, иногда называют текстовым сегментом. Unix сообщение об ошибке «text file busy» ( ETXTBSY
) означает «этот файл - программа, которая выполняется».
Как текст стал означать исполняемый (машинный) код ?
Идеальный ответ: объяснил бы связь между словом и его значением; предоставить ссылку на происхождение или хотя бы историю этого термина; дать некоторое представление о том, какие сообщества используют его.
terminology
history
file-structure
linking
Жиль "ТАК - перестань быть злым"
источник
источник
.text
это директива по сборке. Сборка текстовая.Ответы:
Термин происходит от языка ассемблера. Я не могу проверить этимологию, но я предполагаю, что название происходит от другого использования раздела. Принимая во внимание, что
.data
раздел обозначает переменные, которые могут изменяться в ходе выполнения,.text
раздел содержит данные, которые не изменяются во время выполнения, что позволяет помещать их в ПЗУ при необходимости. Это делает его полезным для кода, да, но также делает его полезным для строк текста, которые не меняются. Это, вероятно, откуда пришел термин.Чтобы ответить на комментарий Гриффина о функциях первого класса, рассмотрим следующий код на python 3:
Код, который вы фактически выполняете, в
increment
конечном итоге выглядит примерно так:Этот исполняемый код может быть помещен в ПЗУ. Он никогда не меняется на протяжении всего выполнения программы, независимо от того, сколько раз вы звоните
counter()
. Что делает изменение являетсяself
указателем и его переменные - члены. Те должны быть помещены в.data
. Когда выreturn increment
, вы на самом деле возвращаете новый экземпляр объекта функции приращения. Вы не создаете динамически новый исполняемый код каждый раз. Сам код является неизменным, хотя указатель на него нет.Единственный код, который должен храниться в
.data
разделе, - это код, созданныйeval()
, поскольку он не известен компилятору или JIT-компилятору в начале программы. Однако даже этот код является неизменным. Если вы измените строку и позвонитеeval()
снова, вы не измените код по сравнению с предыдущим вызовом , вы создаетеeval()
новый набор кода.Хотя программная модель может показаться, что код изменчив, но самодифицирующийся код на уровне команд процессора опасен и редко встречается вне тем OS voodoo, таких как переключение контекста процесса.
источник