Я хотел бы знать, если типы, которые больше, чем родное машинное слово, и которые имеют поддержку абстракции компилятора, как int64_t
в 32-битной системе есть какие-либо спецификации порядка байтов в памяти?
Например, на машинах с прямым порядком байтов следует ли нам предполагать, что схема памяти имеет полный порядок 64-битной подкачки? Или можно быть средним порядком байтов, как PDP-11?
c.f. http://en.wikipedia.org/wiki/Endianness#Middle-endian
Поскольку __int64 (MS) или long long (gcc) не были стандартными до int64_t в C99, не слишком ли далеко, чтобы предполагать что-либо в порядке байтов таких типов?
Спасибо
Почему стандарт хочет указать порядок байтов в памяти чего-либо? Во всех случаях это зависит от компилятора / архитектуры, чтобы свободно решать. Если вы заинтересованы в конкретной архитектуре, просто откройте ваш отладчик и посмотрите, как ведет себя простая программа.
C является переносимым языком и поэтому не предполагает много фактического представления целочисленных типов. Стандарт даже позволяет биты заполнения посыпать между биты значения ! Для получения дополнительной информации см. 6.2.6.2 Целочисленные типы.
Я не думаю, что стандарт C имеет какую-либо спецификацию порядка следования байтов. Это зависит от реализации.
На практике я предположил, что endianess int64_t следует за endianess архитектуры. Так что даже в 32-битной программе хранение int64_t в памяти такое же, как если бы это была 64-битная программа. Но может потребоваться две инструкции для загрузки / хранения данных, так как регистр 32-битный.