@dlangru

Страница 599 из 719
Maxim
13.06.2018
09:21:02
ну по факту, чтобы гарантировать стабильность и предсказуемость, нужно в этой ситуации оперировать только Си-подобными данными

Oleg
13.06.2018
09:26:02
ребят, вы чего? malloc ж никаким боком к gc не относится

и зачем там вообще выделять память в куче?

ev_io* clientIo = new ev_io; MyIo* myIo = new MyIo; myIo.fd = clientSock; clientIo.data = cast(void*)myIo; ev_io_init(clientIo, &clientCb, clientSock, EV_READ | EV_WRITE); ev_io_start(loop, clientIo);
если это кусок функции, то в неё можно передать все структуры, уже выделенные на стеке вызывающей функции

Google
Oleg
13.06.2018
09:29:27
и никаких malloc и new не надо будет

Oleg
13.06.2018
09:30:04
Нельзя
с чего это?

Ievgenii
13.06.2018
09:30:09
Это ev_loop

Oleg
13.06.2018
09:30:21
и что?

Ievgenii
13.06.2018
09:30:38
Он будет пытаться работать с твоими данными уже после выполнения твоей функции

А они удалятся

Вот в чем дело

Oleg
13.06.2018
09:30:59
А они удалятся
перечитай

Ievgenii
13.06.2018
09:31:08
?

перечитай
Не понял

Oleg
13.06.2018
09:31:40
выделить память на стеке функции вызывающей эту

а не в ней

Google
Oleg
13.06.2018
09:32:00
в худшем случае вообще в main

Ievgenii
13.06.2018
09:32:15
А на том этапе я не знаю сколько нужно

Это же обработка входных соединений

Пришло соединение, я принял его

Получил новый сокет

И мне нужна структура, уже на этом этапе

И структура будет асинхронно использовать через какое-то время

Oleg
13.06.2018
09:33:49
окей, тогда в чем проблема передать nogc аллокатор?

Ievgenii
13.06.2018
09:34:07
У меня не вышло)))

Вот в чем)

Oleg
13.06.2018
09:34:20
хммм

Ievgenii
13.06.2018
09:34:28
Пришлось делать new

Хотя я сам точно знаю когда мне удалять эту структуру

:(

Oleg
13.06.2018
09:34:55
если это "highload", то это плохой поход

Ievgenii
13.06.2018
09:35:06
Oleg
13.06.2018
09:35:23
так... стоп

это всё-таки по итогу не nogc код

в чём проблема с аллокатором?

Ievgenii
13.06.2018
09:36:21
Вот получение этой структуры я хотел сделать n9gc

Google
Ievgenii
13.06.2018
09:36:31
И именно это у меня не вышло

Oleg
13.06.2018
09:37:06
new в такой ситуации самый последний вариант

Ievgenii
13.06.2018
09:37:19
Так это пока тесты)))

MyIo, по имени уже понятно)))

Oleg
13.06.2018
09:37:55
если это циклически выполняемая операция, то это и скорость посадит и память будет есть много, если не ограничить

И именно это у меня не вышло
так что не вышло то конкретно?

Ievgenii
13.06.2018
09:39:54
Объявить функцию nogc, в которой пытался сделать новую структуру

Oleg
13.06.2018
09:40:25
new понятное дело не пропустит

Ievgenii
13.06.2018
09:40:45
make

Из theAllocator

Кажется так

Ievgenii
13.06.2018
09:41:08
Я сейчас с телефона

Oleg
13.06.2018
09:41:19
так это ж gc аллокатор по дефолту

Ievgenii
13.06.2018
09:41:21
Митинг ?

Хм...

Oleg
13.06.2018
09:42:14
нужно было бы передать туда другой, а если абстрактный не получается, то конкретный попробовать

тоже сейчас с телефона

Ievgenii
13.06.2018
09:43:58
А какая разница между маллок и аллок?

ребят, вы чего? malloc ж никаким боком к gc не относится
Ты о этом? https://dlang.org/library/core/stdc/stdlib/malloc.html

Google
Ievgenii
13.06.2018
09:46:09
Аллок и маллок

В чем разница?

https://stackoverflow.com/questions/32685851/alloc-malloc-and-alloca-whats-the-difference

Oleg
13.06.2018
09:48:38
это пруф по поводу theAllocator https://dlang.org/phobos/std_experimental_allocator.html#theAllocator

Аллок и маллок
не помню, но к gc отношения не имеет, это gc имеет к malloc (или alloc)

Maxim
13.06.2018
09:50:21
ну, к сишной malloc GC никаким боком не прикручен)

на сто процентов ручное управление памятью

Oleg
13.06.2018
09:50:44
ну, к сишной malloc GC никаким боком не прикручен)
вот тут я бы не был категоричен

gc юзает malloc, при том, по всей видимости разный в rt и ct

Admin
ERROR: S client not available

Oleg
13.06.2018
09:51:45
в ct свой, а в rt почему бы и не сишный

Maxim
13.06.2018
09:52:09
не, ну ясен пень, что где-т внутри GC спрятано выделение памяти)

но не наоборот)

Oleg
13.06.2018
09:52:23
ну так я про это и говорю

Maxim
13.06.2018
09:53:27
ну так и до int 10h дойти можно)

у человека задача очевидная: таскать за вызовом user data, самый простой способ сделать это — это malloc)

Maxim
13.06.2018
09:55:23
а ему в любом случае тут ручной free нужен будет

Pavel
13.06.2018
09:55:53
Ну выше же писали, сделать malloc в main, дальше передавать указатель

Google
Maxim
13.06.2018
09:56:21
а стек-то сохранится?

qwerty
13.06.2018
09:56:27
есть способ проверить, что поле типа void function() не null? field !is null говорит true, но при вызове все равно segfault. Метод, на который ссылается поле пуст

Oleg
13.06.2018
09:56:43
а ему в любом случае тут ручной free нужен будет
ручной, но не free, можно использовать более умные аллокаторы, которые могут переиспользовать память без системных вызовов

Pavel
13.06.2018
09:56:47
А для объектов-соединений хранить эти структуры в freelist

Maxim
13.06.2018
09:57:31
короче, подведем итог: в идеале тут нужно использовать любой nogc аллокатор с ручным управлением памятью

qwerty
13.06.2018
09:59:10
Oleg
13.06.2018
09:59:55
просто func !is null это прям что доктор прописал в этой ситуации

там пусто
может чуть больше кода?

ну всмысле покажи

qwerty
13.06.2018
10:01:07
хорошо, тогда подготовлю все перед показом, чтоб лишнее не отвлекало

а что делает static с методом

?

не с полем

а с отдельной функцией

Oleg
13.06.2018
10:01:43
а что делает static с методом
вот тут и собака зарыта

возможно

static это просто функция, но внутри пространства имён и области видимости класса или структуры

qwerty
13.06.2018
10:02:47
ну вот добавив static, segfault нет. Но я не понимаю, что происходит

Oleg
13.06.2018
10:03:02
вот

короче это не так должно быть

Страница 599 из 719