169 похожих чатов

Пока с бампером игрался, выяснил интересную штуку (как говорится, век

живи - век учись).

using Base.Libc: malloc, free
using BenchmarkTools
import Base: setindex!, getindex, iterate

struct MyVector{T}
ptr::Ptr{T}
sz::Int
end

function MyVector{T}(sz) where T
ptr = convert(Ptr{T}, malloc(sz * sizeof(T)))

return MyVector{T}(ptr, sz)
end

function setindex!(vec::MyVector, x, i)
unsafe_store!(vec.ptr, x, i)
end

function getindex(vec::MyVector, i)
unsafe_load(vec.ptr, i)
end

iterate(vec::MyVector, i = 1) = i > vec.sz ? nothing : (vec[i], i + 1)

и тогда можно использовать его как (почти) обычный вектор:
function f()
vec = MyVector{Int}(10)
for i in 1:vec.sz
vec[i] = i
end
res = sum(vec)
free(vec.ptr)

return res
end

julia> @btime f()
13.469 ns (0 allocations: 0 bytes)

При этом
function g()
vec = Vector{Int}(undef, 10)
@inbounds for i in 1:length(vec)
vec[i] = i
end
res = sum(vec)

return res
end

julia> @btime g()
41.368 ns (1 allocation: 144 bytes)

8 ответов

90 просмотров

может уже есть "язык", где можно было-б в скиптовом режиме на C++ писать сразу, и он на лету компилировался через LLMV?

когда в коде вижу malloc, я хватаюсь за свой Access Violation

Ο Είρωνας-🤍💙🤍 Автор вопроса
Alex
когда в коде вижу malloc, я хватаюсь за свой Acces...

По этому поводу есть хорошая статья, рекомендую почитать https://www.rfleury.com/p/untangling-lifetimes-the-arena-allocator

Ο Είρωνας 🤍💙🤍
По этому поводу есть хорошая статья, рекомендую по...

в плюсах есть умные указатели, которые в принципе тот же gc, только без gc

Решил с этим поэкспериментировать, но результат у меня получается, почему-то, прямо противоположный - с malloc-free считает вдвое дольше. Правда, у меня Windows Кстати, наследовать от AbstractVector тоже, оказывается, нельзя

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

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта