ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
19 июля
1351203
74ALS (15.09.2023 09:38, просмотров: 1716)
Модель памяти абстрактной машины языка C... 

Изучаю язык программирования C в стандарте C90. Возникли некоторые вопросы к модели памяти абстрактной машины языка C. В стандарте термин БАЙТ определен как адресуемая единица памяти данных удовлетворяющая двум критериям:

1. Размер байта должен быть достаточным, чтобы размещать в себе представление символа из базового набора символов среды исполнения.

2. Размер байта должен быть не менее 8 бит.

Я понимаю, что язык C является языком высокого уровня и, как указано в стандарте, определен в терминах абстрактной машины. Данная машина является параметрической (например, размеры базовых типов данных в разных реализациях различны), недетерменированной (unspecified behaviour) и неопределенной (undefined behaviour). Задача разработчика компилятора языка C, чтобы код, сгенерированный компилятором для конкретной платформы, эмулировал работу исходного кода на абстрактной машине C.

Правильно ли я понимаю, что понятие БАЙТА абстрактной машины С определенное в стандарте, вообще говоря, НЕ ОБЯЗЫВАЕТ такой БАЙТ быть идентичным аппаратному байту той платформы для которой реализован компилятор языка C. Другими словами, БАЙТ памяти данных абстрактной машины языка C НЕ ОБЯЗАН напрямую отображаться на аппаратный байт конкретной платформы для которой реализуется компилятор. Разработчик может выбрать иной размер такого байта в силу тех или иных соображений, главное удовлетворять требованиям 1. и 2.?


И второй вопрос (связан с первым вопросом) - правильно ли я понимаю, что внутреннее представление указателя на объекты данных в абстрактной машине C НЕ ОБЯЗАНО быть идентичным представлению аппаратного указателя конкретной платформы для которой реализуется компилятор? Например, в аппаратной машине не реализованы механизмы косвенной адресации и соответственно нет способа напрямую отобразить концепцию указателя в языке C на косвенную адресацию машины. Но разработчик компилятора может попытаться сэмулировать реализацию указателей иными способами?


Может быть кто-нибудь сталкивался на практике с такими реализациями языка C?

Спасибо.