Вы можете использовать оператор на месте 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;
}
И определите соответствующий уничтожить, чтобы соответствовать новому, используемому в этом.
Многобайтовые данные в файлах класса
хранятся с прямым порядком байтов.
Из Спецификация виртуальной машины 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 использует обратный порядок байтов.
Фактические рабочие данные, хранящиеся в запущенном процессе, почти наверняка будут соответствовать порядку байтов выполняемого процесса. Обычно форматы файлов (включая файлы классов) располагаются в сетевом порядке (с прямым порядком байтов).
Обычно трудно сказать, что делает машина под ней, поскольку она абстрагируется виртуальной машиной. Вы не можете преобразовать short []
в байт []
, как в C и C ++. java.nio.ByteOrder.nativeOrder () должен дать вам базовый порядок байтов. Согласование порядка байтов полезно при использовании небайтовых буферов NIO.