@ProCxx

Страница 677 из 2477
Alexander
17.03.2017
16:59:53
а что такое антикафе?

Alex Фэils?︙
17.03.2017
17:00:14
а что такое антикафе?
место для посиделок, где ты платишь за время, а не за жратву, к примеру

Alexander
17.03.2017
17:00:30
аааа, прикольно :)

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

Google
Alexander
17.03.2017
17:01:33
сейчас напишу на своей локальной машинке бенч по-быстрому. Там и оценим и кешируемость и так далее.

Daniil
17.03.2017
17:02:36
Mikhail
17.03.2017
17:04:24
Любопытно
По другому у плюсовиков никак

Vyacheslav
17.03.2017
17:07:35
В споре рождается истина

Gregory
17.03.2017
17:11:53
сейчас напишу на своей локальной машинке бенч по-быстрому. Там и оценим и кешируемость и так далее.
еще есть тема в которой я не могу утверждать что то конкретное, надо смотреть, но что насчет оптимизаций компилятором, векторизация там....

Сергей
17.03.2017
17:12:26
но надо отметить, что вот это обращнеие к обьекту вектор и получение вектор->data() хорошо кешится
Сейчас у обычных итераторов есть просто указатель на данные. Разве прибавление одного уровня коственности может дать прибавку?

Gregory
17.03.2017
17:12:58
что оно будет медленее оно ясно, но насколько

Kirill
17.03.2017
17:13:33
По поводу питерской встречи. 21 марта в офисе оракл будет встреча с++ спб юзер групп. Можно туда завалиться и сделать спп чат аферпати

Сергей
17.03.2017
17:15:46
что оно будет медленее оно ясно, но насколько
в принципе если аллоцировать вектор в куче + аллокатор будет выделять место под data рядом, небольшой объём поместится в кэш линию) а вот если вектор на стеке, да ещё мы передаёт итераторы какому нибудь алгоритму, который для разыменования будет ходить в другой стекфрейм..

Google
Сергей
17.03.2017
17:17:21
суть в том, что просто закешится этот указатель на вектор->data и всё будет очень быстро
А так я не додумал по поводу копирования, сломать не сломав текущую реализацию сходу не получается) Поэтому вдвойне жду какой-либо реализации))

Сергей
17.03.2017
17:21:28
А сломать не получится
по поводу с++ заранее всегда опасно рассуждать с полной уверенностью)

Alexander
17.03.2017
17:21:48
по поводу с++ заранее всегда опасно рассуждать с полной уверенностью)
С полной - безусловно опасно. Но я никак не могу найти кейсы, где бы это ломалось

Сергей
17.03.2017
17:22:06
Gregory
17.03.2017
17:24:30
что может сломаться я хз, по поводу просадки пефоманса еще и из-за кеша - ну да.

сам вектор может быть в одном месте, данные во втором а наш итератор с указателем на вектор в третьем.

с текущими итераторами понятное дело что этого третьего звена ввиде адреса на сам вектор нет, ну и минус одно место по кешу

этот кейс по сути: - вектор является полем класса обьект которого сконструирован хер знает где в начале (мб на стеке в каком нибудь main) - а потом мы где то далеко по стеку начинаем по нему бегать таким итератором )

ну и забегаем постоянно в начало стека к нашему вектору )

Alexander
17.03.2017
17:39:59
http://pastebin.com/ypYyYy04

результаты (gcc 6.2.0 -O3): стандартные итераторы - average 650 ms, оффсет итераторы - average 740 ms

так что вопрос о перфомансе как бы и не стоит сильно

Vyacheslav
17.03.2017
17:46:20
Google
Andrei
17.03.2017
17:47:45
Казалось бы. это несложно
>казалось бы Да вот что-то нифига.

Denis
17.03.2017
17:47:54
Зачем и как?
Почитай дискуссию чуть ниже, пожалуйста

Alexander
17.03.2017
17:48:16
нифига себе не стоит. +15%
да, 15 процентов это неплохо, абсолютно согласен. Но с другой стороны мы получаем итераторы, которые не инвалидируются при реаллокации

хотя я при выборе между этими двумя выберу скорость

Andrei
17.03.2017
17:48:41
Почитай дискуссию чуть ниже, пожалуйста
Я прочитал, и это просто не нужно.

Да, если не хочется ивалидировать храните индекс.

Но вообще идея в том, что если писать реально заботясь о скорости, то мы СНАЧАЛА сделаем reserve нужного размера и больше никогда в жизни не будем перевыделять память в векторе.

Denis
17.03.2017
17:50:02
Если мы не знаем заранее, сколько нужно памяти, это не сработает

А если знаем, можно использовать array

Andrei
17.03.2017
17:52:08
Если мы не знаем заранее, сколько нужно памяти, это не сработает
Об этом и речь, что это misdesign если ты не знаешь сколько памяти.

Речь не о статически известном количестве памяти, а об иммутабельном количестве памяти.

Andrei
17.03.2017
17:52:29
Разные вещи.

Denis
17.03.2017
17:52:43
Об этом и речь, что это misdesign если ты не знаешь сколько памяти.
Данные могут поступаь из источника, который мы не контролируем. Например, из файла

Andrei
17.03.2017
17:52:55
Еще раз внимательно прочитай.

Denis
17.03.2017
17:53:11
Или в вектор складываются результаты вычислений, количество которых заранее неизвестно

Andrei
17.03.2017
17:53:30
ты из файла прочитал число и выделил сразу нужное количество памяти.

Где нельзя заранее выделить достаточно памяти.

Denis
17.03.2017
17:53:58
ты из файла прочитал число и выделил сразу нужное количество памяти.
У меня в файле нет числа, там просто символы до нулевого байта, например

Google
Denis
17.03.2017
17:54:35
Пример реальной задачи, пожалуйста приведи.
Ходим по папкам, считаем количество файлов с заданным именем

Andrei
17.03.2017
17:56:48
Количество файлов — это вроде бы одна переменная :)

Denis
17.03.2017
17:57:23
Ок, список файлов

Andrei
17.03.2017
18:01:25
Зачем тебе _одновременно_ весь список? Ты его наверное вывести хочешь, или по сети передать. Для этого весь список в памяти не нужен. А если по какой-то странной причине нужен — то есть разумное ограничение сверху.

Сергей
17.03.2017
18:26:19
К чему спор если есть deque. Выбирайте размер chunk = размеру кэш линии и всё. В худшем случае будете потреблять немного больше памяти. Вполне разумная альтернатива

Gregory
17.03.2017
18:28:07
непонятно как скатились к теме правильного выбора контейнера под задачу

Denis
17.03.2017
18:28:17
У дека тоже итераторы ломаются

Сергей
17.03.2017
18:28:54
У дека тоже итераторы ломаются
по крайней мере не при реаллокации в следствии нехватки выделенного пространства. Просто не нужно посередине вставлять

Admin
ERROR: S client not available

Gregory
17.03.2017
18:28:56
от темы "безопасных" итераторов вектора и насколько оно дорого

Сергей
17.03.2017
18:29:21
Gregory
17.03.2017
18:31:04
ну то что контейнеры над выбирать под задачу оно как то очевидно - разве не?

Сергей
17.03.2017
18:31:40
Gregory
17.03.2017
18:32:34
меня идея с "безопасными" итераторами зацепила исключительно в контексте: а можно ли дать такое джунам )

т.е. есть ли вообще хоть какой то смысл

пока не очень видно )

Denis
17.03.2017
18:33:23
Они несложно пишутся для любого последовательного контейнера

Сергей
17.03.2017
18:33:55
т.е. есть ли вообще хоть какой то смысл
Не думаю, что стоит. Привыкнут писать невалидный код с точки зрения stl

Denis
17.03.2017
18:34:34
А чем он невалидный?

Gregory
17.03.2017
18:34:50
тем что "такие" итераторы не инвалидируются

Google
Сергей
17.03.2017
18:34:55
лично я за range_v3 подобную обработку данных, где data переносится с помощью move-ctors между копиями контейнеров в pipe подобном виде, трансформируясь по пути

Ребят, есть хороший способ для просмотра автоматически выведенных ссылок? Ну там посмотреть, rvalue или lvalue ссылка, с каким квалификатором она пришла и т.п. в тяжёлом шаблонном коде? Типа static_assert, но чтобы не останавливал компиляцию, а выводил какой нибудь warning вместе с нужной информацией... И вообще, как кто отлаживает шаблонный код?

Denis
17.03.2017
18:53:02
Можно сделать темплейт с приватным конструктором, передсть в него эту ссылку и вызвать конструктор

Он выведет полный тип

Denis
17.03.2017
18:55:56
Ну да

Я не знаб других способов

Сергей
17.03.2017
18:57:02
Ну да
хотелось бы не останавливать компиляцию, нужная специализация класса/функции может идти не первой..

Alexander
17.03.2017
19:01:22
отлаживать шаблонный код - это целое искусство :) тут нужно кастовать разработчиков всяких Boost.MPL

я в ключевых точках делаю static_assert, но это уже отписали выше

Alex Фэils?︙
17.03.2017
19:03:22
еее отладка шаблонов. енабля_иф в помощь и статик_ассерт

Сергей
17.03.2017
19:03:52
я в ключевых точках делаю static_assert, но это уже отписали выше
я создал структуру с набором переопределнных static_assert, и оставляю static_assert по очереди, комментируя остальные. Думаю ужасный способ)

Daniil
17.03.2017
19:04:22
знаю я любителя шаблонов @ZaiZuPro

Сергей
17.03.2017
19:05:00
вроде на какой то конфе был доклад про отладку шаблонов, может кто знает?

Alex Фэils?︙
17.03.2017
19:07:03
вроде на какой то конфе был доклад про отладку шаблонов, может кто знает?
тож чот было, но не помню. если найдешь, пиши, сделаем пост в новостной канал

Gregory
17.03.2017
19:15:08
случаем не что то связанное с clang AST ? )

Alexander
17.03.2017
19:29:25
Сергей
17.03.2017
19:33:02
вот так не получилось(( http://pastebin.com/KiYSkbSB

Страница 677 из 2477