Данный класс Line как в Java и C++, а также следующие объявления в Java и C++ соответственно -распределение памяти - Java против C++
Line[] p;
и
Line *p;
Каковы различия в семантике между на двух языках при последующем запуске следующего кода:
p = new Line[7];
В частности, возрасты назначают кучную память для массива таким же образом?
Извините, что я провел исследование по этому вопросу, однако я все еще чувствую, что не понял.
Спасибо!
Это становится важным при распределении многомерных массивов. В то время как C++ выделяет все размеры как один большой кусок памяти, Java рассеивает субмассивы. Для массива 10x10 из 'int', для примера Java выделяет 10 массивов размера '10 * размера int + a little' плюс один массив размера' 10 * размера ссылки + немного', C++ выделяет только один массив размера '100 * размера int. «A little» требуется в Java для получения дополнительной информации: размер массива, тип, ... – Turing85
Да, отличная точка и точно правильный Turing85! : O) Прикрепление 2-D выделения памяти для C++ (http://www.fredosaurus.com/notes-cpp/arrayptr/23two-dim-array-memory-layout.html) и Java (http: // www. javamex.com/tutorials/memory/array_memory_usage.shtml) для OP –
@ user3636636 В приведенном выше коде будет создан массив из семи ссылок. Эти ссылки будут установлены на «null». Вы можете проверить, что путем итерации по массиву и печати записей после 'новой строки [7];'. Оба массива (в C++ и Java) инициализируются с помощью 'null', поскольку ни C++, ни Java не знают, как инициализировать строку. Ситуация отличается от встроенных ('int',' long', ...), поскольку они имеют значения по умолчанию для propper. Furhtermore, C++ использует массивы «на месте»: массивы хранят записи direclty, тогда как java-массив «only» сохраняет ссылку на объект. – Turing85