
Dmitry
16.08.2017
06:44:33
ну тут это постоянно всплывает

Maxim
16.08.2017
06:44:38
при передаче ссылки в какую-нибудь функцию она может оказаться в регистре, если соглашение о вызове позволяет передавать переменные в регистрах)

Dmitry
16.08.2017
06:46:49
1. я создаю переменную x где ее имя и данные будут располагаться?
2. структуру тот же вопрос
3. объект
ну ок. объекты у нас в куче, а структуры на стеке, а где сами данные? У структуры ее имя будет на стеке?

Maxim
16.08.2017
06:47:23
да нету никакого имени

Google

Maxim
16.08.2017
06:47:36
это всего лишь байты и указатели на байты)

Ned Ogl
16.08.2017
06:47:44

Maxim
16.08.2017
06:48:03
когда ты создаешь структуру, все ее переменные пушатся в стек и хранятся там

Dmitry
16.08.2017
06:48:11

Maxim
16.08.2017
06:48:48
имени не существует
имя — это высокоуровневая абстракция, в конечном исполняемом файле его нет

Ned Ogl
16.08.2017
06:49:43
и имя и данные?
Имя структуры не важно вовсе. Имя - это её идентификатор, по которому компилятор понимает, что ты обращаешься к полю именно этой структуры, а не какой-либо другой

Dmitry
16.08.2017
06:49:58
а где этот идентификатр хранится?

Ned Ogl
16.08.2017
06:50:20
На стеке компилятора на этапе компиляции

Maxim
16.08.2017
06:50:33

Ned Ogl
16.08.2017
06:50:49
После этого у тебя только объектный код, который обращается к памяти
Больше-то ничего и не происходит

Dmitry
16.08.2017
06:54:31
структуры располагают данные на стеке верно же? А если данных будет много, то?

Google

qwerty
16.08.2017
06:55:03
то stackoverflow

Dmitry
16.08.2017
06:56:24
Тоесть если я создам массив структур скажем на 500MB то он выйдет за границы стека?

Maxim
16.08.2017
06:56:51
зависит от того, какого размера стек

Dmitry
16.08.2017
06:57:01
это зависит от ОС?

Maxim
16.08.2017
06:57:22
да, и от флагов компиляции

Dmitry
16.08.2017
06:58:39
ну тут лимиты (сейчас читаю) 1MB или около того под Windows
как же тогда массив структур работает?
я же кучу раз данные в него получал из той же БД

Maxim
16.08.2017
07:01:51
массив же менеджится GC, он в куче создается
https://software.intel.com/en-us/articles/memory-limits-applications-windows
Stack data - 1GB (the stack size is set by the linker, the default is 1MB. This can be increased using the Linker property System > Stack Reserve Size)
если вдаваться в глубину глубин, по сути, под виндой размер стека — это разница между base address программы и начальным значением SP, насколько я понимаю)

Ned Ogl
16.08.2017
07:05:28
Вообще, если есть статический массив структур, он должен падать в .bss или . data секцию и с тем он ни попадает ни в стек, ни в кучу

qwerty
16.08.2017
07:20:07
Я вообще думал, что железом ограничивается стэк
Неужели stack reserve size не ограничивается?

Maxim
16.08.2017
07:23:14
ну память-то виртуальная, если ее не хватит, начнет в своп выгружаться

Ned Ogl
16.08.2017
07:54:48
http://asm.dlang.org/#compilers:!((compiler:dmd2071,options:'-betterC',source:'int+x()%7B%0A++++struct+lol%7B%0A+++++++int+a+%3D+1%3B%0A++++%7D%0A++++lol+t%3B%0A++++t.a+%3D+2%3B%0A++++return+t.a+-+11%3B%0A%7D%0A%0A%0A%0A')),filterAsm:(binary:!t,intel:!t),version:3

Google

Ned Ogl
16.08.2017
07:56:27
И часть её отображается на устройства, часть вообще хз куда, часть в своп, часть в планки оперативки.
И как именно - хуй его знает, это работа чипсета
Функция отодвигает вершинку стека (чуть-чуть) и туда помещается структурка

Dmitry
16.08.2017
07:59:28
на какой строке стек двигается?
mov eax,DWORD PTR [rip+0x0] ?

Stepanos
16.08.2017
08:36:43
преждевременная оптимизация - зло :) я б таким не заморачивался даже пока боком не вьілезет

Eto
16.08.2017
10:40:39
По букве "ы" заметно, что ты многим не заморачиваешься.

Stepanos
16.08.2017
11:14:25

Eto
16.08.2017
11:16:50

Stepanos
16.08.2017
11:22:06
так что не так то? :) у меня нет такого символа на клавиатуре
как ето относиться к тому что заморачиваюсь я многим иль нет?)

Dmitry
16.08.2017
11:37:38
sp - stack pointer
как же тогда массив структур работает?
Если структура типа Т и делаешь массив Т[], то переменная массива - это только указатель на данные и длина, это лежит на стеке, два слова. А сами данные, если добавлять через ~= и подобные, лежат в куче.
Вот если T[100], с определенным размером, тогда все 100 структур на стек лягут.

Maxim
16.08.2017
11:44:28
но нужно помнить, что в D: The total size of a static array cannot exceed 16Mb

qwerty
16.08.2017
11:44:58
ого!
а не
нормально)

Google

Eto
16.08.2017
11:46:34

Dmitry
16.08.2017
11:47:48
речь о раскладке, я думаю. Ему надо переключать раскладку, чтобы такую букву ввести

Stepanos
16.08.2017
12:14:00
у меня нет рус раскладки)

Pavel
16.08.2017
12:14:43
Такое ощущение что с сокетами в D какие-то проблемы (
Если тестировать через ab во много потоков то некоторые конекты подвисают
Причем это может происходить как в vibed так и в голом сокете с ручной работой

Maxim
16.08.2017
12:16:41
Значит, проблема не в D)

qwerty
16.08.2017
12:16:55
а коннекты должны сразу обрабатываться? Или они должны в очередь становится?

Pavel
16.08.2017
12:18:32
Должны как можно быстрее
Я провожу один и тот же тест - прочитать запрос и сразу отослать HTTP 200 OK

Admin
ERROR: S client not available

Dmitry
16.08.2017
12:19:17
В одном потоке?

Pavel
16.08.2017
12:19:38
в случае вайба просто пишу в экшене res.writeBody("") и все
Уже что только не перепробовал. И distribute флаг устанавливать, и движок менять с libevent2 на libasync
В 1 поток, во все потоки ядер, как угодно )
В общем мне кажется делать нагрузочный тест в 1000 потоков не такая уж большая проблема, или может я слишком многого хочу?

Maxim
16.08.2017
12:21:57
это все на локалхосте крутится?)

Pavel
16.08.2017
12:22:22
Да. Ну не прям совсем на локалхосте, то в докере то в LXC, когда как.

Dmitry
16.08.2017
12:22:39
res.writeBody("") он вроде медленный, там нужно что-то другое вызывать

Pavel
16.08.2017
12:24:47
Ты знаешь, я уже мне кажется все исходники вдоль и поперек прочесал, и как мне показалось, компилятор и анализатор генерит не такой уж плохой код. Т.е. когда оно работает, то работает в среднем с такой же скоростью как и nginx, или в 1.5-2 раза медленнее

Google

Pavel
16.08.2017
12:25:27
Под капотом все это прверащается в адскую мясорубку указателей и статически выделенной памяти )
Но вот я пробовал тот же nginx голый тестить и он всегда все конекты отдает, ab никогда не подвисал
Еще меня очень порадовала libasync, круто сделано :) Еще бы не было этих проблем с конектами непонятными, было бы вообще замечательно
Правда там есть один момент, резолвинг DNS зачем то встроен прямо в event loop, вот этот костыль я не понял ))

Maxim
16.08.2017
12:33:54
там же просто асинхронный резолвер вроде

Pavel
16.08.2017
12:34:48
Ну да, но как бы... Причем тут вообще это. Это не ответственность класса.

Maxim
16.08.2017
12:35:15
так там и асинхронный ввод-вывод есть
я имею в виду, файлы, и слежение за изменением файловой системы, и даже таймер)

Pavel
16.08.2017
12:36:03
Ну в общем видимо это область интересов авторов, вот они туда все и понапихали такого

Maxim
16.08.2017
12:36:47
просто, если ты, например, в файбере обратишься к синхронному DNS резолверу, то файбер повиснет до тех пор, пока резолвер не вернет значение
а если к асинхронному, то event loop может ждать ответа и в это время делать что-то еще

Pavel
16.08.2017
12:37:24
Ну так это очевидно, просто не надо юзать синхронный код в файберах )

Maxim
16.08.2017
12:37:26
то же и с вводом-выводом

Pavel
16.08.2017
12:40:36
https://github.com/etcimon/libasync/blob/master/source/libasync/events.d#L81 я вот про это. Тут этот метод ни к чему. Могли бы сделать отдельной структурой или функцией

Maxim
16.08.2017
12:42:07
хм, это действительно странно)

Oleg
16.08.2017
12:43:29
Кстати
Ну и дичь, всё-таки этот vibe

Pavel
16.08.2017
12:44:27
Ну там очень много всего насовано

Oleg
16.08.2017
12:45:02
1 сек
Инет на компе пропал
https://github.com/rejectedsoftware/vibe.d/issues/1888
и ко всему