@dlangru

Страница 566 из 719
Ievgenii
14.05.2018
15:09:17
Реально t.reserve(count); все разреливает

Хм...

Dmitry
14.05.2018
15:10:01
дефолтные не при чем, см. число живых/живших

Ievgenii
14.05.2018
15:10:34
Ну оно как-ты говоришь

Google
Ievgenii
14.05.2018
15:11:04
Он выделяет новую память и сразу, видимо, резервирует доп. элемент, в который вставляет после мой элемент

И из-за этого создается лишний элемент

Stanislav
14.05.2018
15:14:42
больше 100 сразу 125 выделяет )

Ievgenii
14.05.2018
15:17:53
Значит нужно всегда reserve делать, если знаешь новый размер...

Stanislav
14.05.2018
15:22:32
ты так дойдешь до статических массивов и ручным управлением памятью скоро :)

Ievgenii
14.05.2018
15:22:46
)))

Так даже перфоменс выше

Там, конечно, очень маленький прирост, но есть

ты так дойдешь до статических массивов и ручным управлением памятью скоро :)
Ты знаешь, если ты делаешь какую-то либу, которая хорошо работает, то в чем проблема, что она без GC там работает?

Пусть себе как хочет это делает, если автор дает 100% горантию, что он знает, что он делает)

Не вижу в этом ничего плохого, пусть управляет руками той памятью, которой оперирует его либа

ты так дойдешь до статических массивов и ручным управлением памятью скоро :)
А на счет извращения, вот посмотри: /mnt/c/docker$ time ./test.exe 10000000 10000000 10000381 END real 0m0.302s user 0m0.000s sys 0m0.000s

Найди "две" странности)))

Google
Stanislav
14.05.2018
15:28:50
10000381 это capacity?

Ievgenii
14.05.2018
15:29:01
да

Dmitry
14.05.2018
15:30:20
А я тут обнаружил, что винда рулит, а линукс отстой. Если пишешь на D числодробилку. Ибо LDC на винде творит чудеса. А в линуксе та же версия LDC не творит чудеса. Вот простой тест с вычислениями синусов и косинусов: https://gist.github.com/thedeemon/aba0ecc2607d781ebfe81c9fef144704 В линуксе LDC лишь процентов на 10 быстрее DMD. А на винде разница в 4.4 раза! Линуксовый бинарник работает 4.92 секунды. Виндовый бинарник, собранный той же версией LDC, - 1.10 секунды!

Ievgenii
14.05.2018
15:30:30
Правда меня растроил факт, что кондишн чек в форе не кешируется :(

Dmitry
14.05.2018
15:30:42
Тут это микробенчмарк, а я столкнулся на реальной программе, где много синусов и косинусов считалось, помимо прочей вещественной арифметики. Там виндовый бинарник где-то вдвое быстрее линуксового оказался, если компилить LDC. А если компилять DMD, то разницы практически нет. На винде LDC-шный вариант большой проги в 6 раз быстрее DMD-шного. А на линуксе лишь в 2-3 раза быстрее, что тоже хорошо, но двое медленнее винды. Причем можно через Wine виндовый бинарник запустить, и он будет вдвое быстрее нативного линуксового. Такие вот чудеса. Похоже, дело в том, какой рантайм используется, реализация тригонометрии в виндовом LDC супершустрая.

Dmitry
14.05.2018
15:33:13
в какой системе?

Ievgenii
14.05.2018
15:33:47
/mnt/c$ uname Linux

lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04.4 LTS Release: 16.04 Codename: xenial

Dmitry
14.05.2018
15:34:19
а как это работает без вайна?

Ievgenii
14.05.2018
15:34:23
))))

В винду интегрировали же ядро линухи)))

Вот просто запускаю баш и фигашу)

Можно как линуксовые, так и виндовые запускать

Dmitry
14.05.2018
15:34:57
ну так это винда тогда

Ievgenii
14.05.2018
15:35:15
С одной стороны да, но я могу использовать оба ядра

Вот я сейчас компилю под винду, а запускаю с линухи...

Извращение еще то)))

for(uint i=0; i<to!int(args[1]); ++i){ В этом случаи кондишн чек будет вычисляться каждый раз :(

Google
Ievgenii
14.05.2018
15:38:02
Думал что компилятор такое оптимизирует

Но нет

Ievgenii
14.05.2018
15:38:55
Сделал так: uint count = to!int(args[1]); for(uint i=0; i<count; ++i){

И это почти в 2 раза быстрее работает

при переданом 10М ввиде параметра

/mnt/c/docker$ time ./test.exe 10000000 10000000 10000381 END real 0m0.574s user 0m0.000s sys 0m0.000s /mnt/c/docker$ time ./test.exe 10000000 10000000 10000381 END real 0m0.303s user 0m0.000s sys 0m0.000s

Dmitry
14.05.2018
15:40:27
ну так там вызов ф-ии, и компилятор не знает, вдруг она там на каждом вызове что-то важное и новое делает.

conv.to поди не помечена как pure

да если б и была, компиляторы редко умеют этим пользоваться

Ievgenii
14.05.2018
15:42:25
А если помечена, то что?

Dmitry
14.05.2018
15:42:52
в идеале, компилятор вызов чистой ф-ии мог бы вынести из цикла

Dmitry
14.05.2018
15:43:31
Но в том же LDC оптимизатор по сути сишный, он про чистые ф-ии не знает

Stanislav
14.05.2018
15:43:57
ну он еще должен чекнуть что ты не поменяешь args[1]

Dmitry
14.05.2018
15:44:43
да, тоже важно

Ievgenii
14.05.2018
15:44:54
Тоже верно

Ну, так или иначе - нужно выносить в переменную

Denis
14.05.2018
15:58:41
64 нужно в первую очередь для работы с большими объёмами данных. Если их нет, то и толку может не быть.
для линукса есть хак чтобы юзать на 64битной системе 32битные указатели

точнее не хак а АПИ

Google
Oleg
14.05.2018
16:03:19
stlink?
ну да

Denis
14.05.2018
16:06:41
ну да
дык это, openocd

Eto
14.05.2018
16:23:49
дык это, openocd
OpenOCD? Open Obsessive-Compulsive Disorder?

Denis
14.05.2018
16:24:08
apt-cache search openocd openocd - открытый внутрисхемный отладчик для систем ARM и MIPS

Pavel
14.05.2018
17:01:42
/// human-readable IP adress @property const (char)* addressStringz() { char[INET6_ADDRSTRLEN+1] str; return inet_ntop(AF_INET6, &address, str.ptr, str.length); }

Что если я верну указатель на массив char который был выделен на стеке во время работы функции. Он ведь не успеет сразу очиститься? =)

Stanislav
14.05.2018
17:07:51
опасненько

Pavel
14.05.2018
17:08:48
А впрочем да, я не успею даже следующим оператором распечатать полученную строку, так как она тут же затрется вызовом printf

Admin
ERROR: S client not available

Denis
14.05.2018
17:09:03
на спичках экономишь

Pavel
14.05.2018
17:09:18
на спичках экономишь
Ровно этим я люто и занимаюсь

Надо понять, можно ли выделять 46 байт на стеке только в случае ошибки или придется делать это каждый раз

Pavel
14.05.2018
17:13:21
точнее не хак а АПИ
https://msdn.microsoft.com/ru-ru/library/windows/desktop/aa366527(v=vs.85).aspx https://msdn.microsoft.com/ru-ru/library/windows/desktop/aa366796(v=vs.85).aspx -и в винде найдётся

Oleg
14.05.2018
17:14:04
может просто передавать в функцию выделенную память?

Denis
14.05.2018
17:14:22
ну вот хз только насчёт его стабильности. как по мне так идея годная. у меня в разработке нет софта который требует больше 4гигов RAM

Oleg
14.05.2018
17:14:25
как на Си?

Denis
14.05.2018
17:14:33
выделять - дораха

Google
Denis
14.05.2018
17:14:35
)

Oleg
14.05.2018
17:14:50
выделять - дораха
а если на стеке выделить?

Denis
14.05.2018
17:15:06
тогда по входу там мусор будет же

Oleg
14.05.2018
17:15:08
char[46] buffer; auto result = myFunc(buffer[]);

да и вообще не 46, а 1024

чтобы любую строку можно было напечатать

и срез возвращать

Pavel
14.05.2018
17:20:33
Как то странно размер бинарника генерится. Был 28495 байт, а добавил эту распечтаку строк в двух местах и размер стал 32918 ?

Выравнивается по 4к чтоли

Ладно втопку, распечатаю просто 16-байтный адрес в лог, вот еще за пользователей переводить в human readable формат.

Denis
14.05.2018
17:23:56
перевод уже у нас встроен давно

велосипедишь

Pavel
14.05.2018
17:25:26
только не в betterC ;)

Oleg
14.05.2018
17:26:21
только не в betterC ;)
чем идея с передачей выделенной памяти не нравится?

Pavel
14.05.2018
17:28:21
Да впринципе норм.. Но выглядеть это будет не очень структуриовано, если я буду во все функции пробрасывать кусочек буфера

Denis
14.05.2018
17:29:08
всё нормально будет, только не кусок буфера возвращай а это уже почти что честный аллокатор получится самобельный

Oleg
14.05.2018
17:29:42
ты же можешь буфер хранить в самой структуре

и просто учитывать что он перезаписывается

а возвращать его срез

Pavel
14.05.2018
17:30:25
Статически?

Oleg
14.05.2018
17:30:27
ну да

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