Endianness виртуальной машины Java

Вы можете использовать оператор на месте new.

Car* createCars(unsigned number)
{
    if (number == 0 )
        return 0;
    Car* cars = reinterpret_cast<Car*>(new char[sizeof(Car)* number]);
    for(unsigned carId = 0;
        carId != number;
        ++carId)
    {
        new(cars+carId) Car(carId);
    }
    return cars;
}

И определите соответствующий уничтожить, чтобы соответствовать новому, используемому в этом.

30
задан JoeCool 11 June 2009 в 14:47
поделиться

2 ответа

Многобайтовые данные в файлах класса хранятся с прямым порядком байтов.

Из Спецификация виртуальной машины Java, Java SE 7 Edition , Глава 4: Класс Формат файла :

Файл класса состоит из потока 8-битные байты. Все 16-битные, 32-битные и 64-битные величины строятся чтение в два, четыре и восемь последовательные 8-битные байты соответственно. Многобайтовые элементы данных хранятся всегда в порядке прямого байта, где высокий байты идут первыми.

Кроме того, операнд в инструкции байт-кода также является обратным порядком байтов, если он занимает несколько байтов.

Из Спецификация виртуальной машины Java, Java SE 7 Edition , Раздел 2.11: Сводка набора команд :

Если операнд содержит более одного байта в размер, то он сохраняется в обратном порядке сначала байт старшего порядка. Для например, беззнаковый 16-битный индекс в локальные переменные хранятся как две беззнаковые байты, байт1 и байт2 , например что его значение равно (byte1 << 8) | byte2 .

Так что да, я думаю, можно сказать, что виртуальная машина Java использует обратный порядок байтов.

31
ответ дан 27 November 2019 в 23:59
поделиться

Фактические рабочие данные, хранящиеся в запущенном процессе, почти наверняка будут соответствовать порядку байтов выполняемого процесса. Обычно форматы файлов (включая файлы классов) располагаются в сетевом порядке (с прямым порядком байтов).

Обычно трудно сказать, что делает машина под ней, поскольку она абстрагируется виртуальной машиной. Вы не можете преобразовать short [] в байт [] , как в C и C ++. java.nio.ByteOrder.nativeOrder () должен дать вам базовый порядок байтов. Согласование порядка байтов полезно при использовании небайтовых буферов NIO.

18
ответ дан 27 November 2019 в 23:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: