Size: a a a

Язык программирования Julia / Julia programming language

2021 July 02

DB

Dmitry Bagaev in Язык программирования Julia / Julia programming language
источник

DB

Dmitry Bagaev in Язык программирования Julia / Julia programming language
The efficiency gained by being able to store Point{Float64} objects with immediate values is magnified enormously in the case of arrays: an Array{Float64} can be stored as a contiguous memory block of 64-bit floating-point values, whereas an Array{Real} must be an array of pointers to individually allocated Real objects – which may well be boxed 64-bit floating-point values, but also might be arbitrarily large, complex objects, which are declared to be implementations of the Real abstract type.
источник

DB

Dmitry Bagaev in Язык программирования Julia / Julia programming language
Это тоже не правда
источник

DB

Dmitry Bagaev in Язык программирования Julia / Julia programming language
Если тип, который вы объявляете заранее абстрактный или mutable то массив будет хранить ссылки
источник

DB

Dmitry Bagaev in Язык программирования Julia / Julia programming language
Или например «большие» Union типы иногда тоже разворачиваются в ссылки, хотя все элементы union могут быть упакованы линейно в теории
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
Я же про простые типы написал
источник

DB

Dmitry Bagaev in Язык программирования Julia / Julia programming language
Пропустил, да, я думаю если тип isbits = true, то вы правы думаю про простые типы
источник

DB

Dmitry Bagaev in Язык программирования Julia / Julia programming language
Но в целом Джулия может линейно упаковывать, не только простые типы, но и сложные структуры тоже
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
Ну так вот что надо сделать, чтобы быть уверенным в этом?….
источник

A

Arthur in Язык программирования Julia / Julia programming language
Тот же Abc почти что view, а их с недавних версий выделяют на стеке, а значит и в массиве может паковать «на месте»
источник

DB

Dmitry Bagaev in Язык программирования Julia / Julia programming language
Структура должна быть immutable , тогда она будет упакована линейно
источник

A

Arthur in Язык программирования Julia / Julia programming language
Девы явно говорят, что гарантий нет, это детали оптимизации
источник

A

Arthur in Язык программирования Julia / Julia programming language
Мне кажется, если создать очень жирную структуру, то компилятор может решить не паковать ее
источник

A

Arthur in Язык программирования Julia / Julia programming language
А ля один инстанс весит под 1 МБ
источник

DB

Dmitry Bagaev in Язык программирования Julia / Julia programming language
В теории да, там всякие эвристики, но они вполне предсказуемы. Про жирную структуру да ее компилятор может решить не упаковывать, но в целом этот механизм достаточно просто устроен и если хочется линейного массива нужно хранить либо isbits типы либо неизменяемые структуры
источник

A

Alexandr in Язык программирования Julia / Julia programming language
Особенно если предварительно сделать sizehint! на предполагаемую длину вектора - он сразу аллоцирует нужный объем но оставляет длину вектора нулевой
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Но вообще мы в этом же чатике проверяли, и конкретная реализация push относительно медленная.
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Руками push можно делать гораздо быстрее.
источник

A

Alexandr in Язык программирования Julia / Julia programming language
Я думаю что использовать push! или заранее создавать массив сильно зависит от задачи. Если точно заранее известно какой длины получится вектор то конечно его лучше сразу создать, а потом заполнять. Но бывает что на входе непонятно какой длины он будет. Например внутри цикла какие-то условия проверяются и push! происходит не на каждой итерации, или наоборот может происходить несколько раз на каждой итерации. Тогда, ИМХО, проще и удобнее сделать sizehint! на какой-то разумный размер и добавлять поэлементно.
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
+
источник