Size: a a a

WebAssembly — русскоговорящее сообщество

2020 May 01

AT

Alexander Tchitchigi... in WebAssembly — русскоговорящее сообщество
Во-первых, объекты JS могут и не удаляться из памяти, если памяти хватает. Зануление ссылки ничего не означает. Собственно, любой GC может ничего и не удалять.
источник

ВГ

Вячеслав Гук... in WebAssembly — русскоговорящее сообщество
ну я в инетике почитал, что если в js на объект ссылок нет, его кушают)
источник

AT

Alexander Tchitchigi... in WebAssembly — русскоговорящее сообщество
Во-вторых, в JS — в отличие от хотя бы C# — нет никаких деструкторов/файнализаторов, так что GC никак не может знать, что при удалении объекта нужно что-то ещё сделать/вызывать.
источник

ВГ

Вячеслав Гук... in WebAssembly — русскоговорящее сообщество
ну у меня просто класс в с++ памяти много использует, а в деструкторе ее чистит
источник

AT

Alexander Tchitchigi... in WebAssembly — русскоговорящее сообщество
Вячеслав Гук
ну я в инетике почитал, что если в js на объект ссылок нет, его кушают)
Возможно. Когда-нибудь. Возможно, уже только тогда, когда вся программа завершается. 🤷‍♀️
источник

ВГ

Вячеслав Гук... in WebAssembly — русскоговорящее сообщество
Alexander Tchitchigin
Во-вторых, в JS — в отличие от хотя бы C# — нет никаких деструкторов/файнализаторов, так что GC никак не может знать, что при удалении объекта нужно что-то ещё сделать/вызывать.
ну вот это я уже понял
источник

AT

Alexander Tchitchigi... in WebAssembly — русскоговорящее сообщество
Вячеслав Гук
ну у меня просто класс в с++ памяти много использует, а в деструкторе ее чистит
Придётся деструктор руками вызывать.
источник

ВГ

Вячеслав Гук... in WebAssembly — русскоговорящее сообщество
а как вообще объект удаляется с++-ный тогда?
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
Вячеслав Гук
ну я в инетике почитал, что если в js на объект ссылок нет, его кушают)
нет, не всегда, почти во всех браузерах есть т.н. delayed free, который в первую очередь предназначен для усложнения эксплуатации уязвимостей
источник

ВГ

Вячеслав Гук... in WebAssembly — русскоговорящее сообщество
если бы я не через malloc выделял, а через статическую память
источник

ВГ

Вячеслав Гук... in WebAssembly — русскоговорящее сообщество
Mikhail Voronov
нет, не всегда, почти во всех браузерах есть т.н. delayed free, который в первую очередь предназначен для усложнения эксплуатации уязвимостей
ну рано или поздно он же все равно подчистит
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
Вячеслав Гук
ну рано или поздно он же все равно подчистит
да, обычно там есть threshold на количество delayed объектов
источник

AT

Alexander Tchitchigi... in WebAssembly — русскоговорящее сообщество
В самом WASM память можно только наращивать, а освобождать вообще нельзя. "Освобождением" занимается библиотека времени выполнения конкретного языка, реализованного поверх WASM. Так что через неё руками всё делается.
источник

К

Константин in WebAssembly — русскоговорящее сообщество
Вячеслав Гук
если бы я не через malloc выделял, а через статическую память
JS управляемый, васм - нет
источник

К

Константин in WebAssembly — русскоговорящее сообщество
конец
источник

К

Константин in WebAssembly — русскоговорящее сообщество
для этого нужно иметь GC реализованный поверх WASM,про который выше написали
источник

ВГ

Вячеслав Гук... in WebAssembly — русскоговорящее сообщество
ну окей допустим у меня в классе используется статический массив на 100 байт. и я просто в коде периодически создаю объекты этого типа. Если я это делаю в с++, оно автоматически удаляется, а если в js, то я дойду до 4гб и все, исключение вылетит?
источник

ВГ

Вячеслав Гук... in WebAssembly — русскоговорящее сообщество
вряд ли же
источник

К

Константин in WebAssembly — русскоговорящее сообщество
Кто удаляется?
источник

К

Константин in WebAssembly — русскоговорящее сообщество
никто не удаляется
источник