Size: a a a

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

2020 May 24

RS

Roman Samarev in Язык программирования Julia / Julia programming language
Последний - ans. Предпоследний…. Может и никак…
источник

KT

Kirill Tsaregorodtse... in Язык программирования Julia / Julia programming language
Ещё одна странная фиговина:

struct Foo{N,T}
t :: NTuple{N,T}
end

using BenchmarkTools

@benchmark Foo($(1,2,3))
@benchmark Foo($(big(1),big(2),big(3)))
источник

KT

Kirill Tsaregorodtse... in Язык программирования Julia / Julia programming language
в первом случае 0 аллокаций, во втором — 16 байт, почему
источник

VG

Viktor G. in Язык программирования Julia / Julia programming language
попробуйте объявлять аргументы вне вызова функции
источник

KT

Kirill Tsaregorodtse... in Язык программирования Julia / Julia programming language
t = (big(1), big(2), big(3))
@benchmark Foo($t)
BenchmarkTools.Trial:
 memory estimate:  16 bytes
 allocs estimate:  1
 --------------
 minimum time:     4.524 ns (0.00% GC)
 median time:      5.824 ns (0.00% GC)
 mean time:        7.327 ns (1.73% GC)
 maximum time:     516.912 ns (97.99% GC)
 --------------
 samples:          10000
 evals/sample:     1000
источник

KT

Kirill Tsaregorodtse... in Язык программирования Julia / Julia programming language
@code_native Foo(t)
 .text
; ┌ @ REPL[2]:2 within `Foo'
 pushq  %rbx
 subq  $16, %rsp
 movq  %rsi, 8(%rsp)
 movq  %fs:0, %rdi
 addq  $-15712, %rdi           # imm = 0xC2A0
 movq  (%rsi), %rbx
; │ @ REPL[2]:2 within `Foo' @ REPL[2]:2
 movabsq  $jl_gc_pool_alloc, %rax
 movl  $1400, %esi             # imm = 0x578
 movl  $16, %edx
 callq  *%rax
 movabsq  $140263718658720, %rcx  # imm = 0x7F91B12022A0
 movq  %rcx, -8(%rax)
 movq  %rbx, (%rax)
; │ @ REPL[2]:2 within `Foo'
 addq  $16, %rsp
 popq  %rbx
 retq
; └
источник

KT

Kirill Tsaregorodtse... in Язык программирования Julia / Julia programming language
@code_native Foo((1,2,3))
 .text
; ┌ @ REPL[2]:2 within `Foo' @ REPL[2]:2
 movq  16(%rdx), %rax
 movq  %rax, 16(%rdi)
 vmovups  (%rdx), %xmm0
 vmovups  %xmm0, (%rdi)
; │ @ REPL[2]:2 within `Foo'
 movq  %rdi, %rax
 retq
 nopw  %cs:(%rax,%rax)
; └
источник

ВФ

Виктор Федоров... in Язык программирования Julia / Julia programming language
Kirill Tsaregorodtsev
в первом случае 0 аллокаций, во втором — 16 байт, почему
Можно предположить, что 16 байт - это как раз для временного размещения возвращаемого функцией big результата
источник

KT

Kirill Tsaregorodtse... in Язык программирования Julia / Julia programming language
от размера tuple не зависит вроде бы
источник

ВФ

Виктор Федоров... in Язык программирования Julia / Julia programming language
Элементы тупла наверное по очереди формируются
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
А big разве не вллоцирует? Было что-то недавно на discourse там кто-то тоже обнаружил, что какая-то невинная операция с big внезапно аллоцирует.
источник

АО

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

KT

Kirill Tsaregorodtse... in Язык программирования Julia / Julia programming language
у меня там вообще не big, а свои custom types
источник

KT

Kirill Tsaregorodtse... in Язык программирования Julia / Julia programming language
и точно так же по 16 байт
источник

ВФ

Виктор Федоров... in Язык программирования Julia / Julia programming language
а sizeof(custom_types) чему равно?
источник

KT

Kirill Tsaregorodtse... in Язык программирования Julia / Julia programming language
да там непонятно
источник

ВФ

Виктор Федоров... in Язык программирования Julia / Julia programming language
Если бы было тоже 16, то тогда мое объяснение не опровергалось бы
источник

KT

Kirill Tsaregorodtse... in Язык программирования Julia / Julia programming language
я не знаю, что возвращает sizeof для моей структуры данных
источник

KT

Kirill Tsaregorodtse... in Язык программирования Julia / Julia programming language
пишет якобы 8, но если брать размеры полей, то они больше
источник

АО

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