
Pavel
28.09.2018
12:25:04
begin end валидные

Ilia
28.09.2018
12:26:20

Pavel
28.09.2018
12:26:46

Google

Ilia
28.09.2018
12:28:12
ну а чем еще?
На практике не должно все же такого быть.
Может зацикливаться, может не сортировать.
Может выдать диагностику или исключение.
Но не падать по выходу за границы массива

Pavel
28.09.2018
12:29:38
ну вот в этом был и вопрос - есть ли такое в стандарте. то что отсоритрует не верно это понятно. но если я в компаратор получаю end + 2 это нормальное следствие плохого компаратора или нет?
в принципе ub = что угодно, но может там есть какие уточнения на это счет

Igor
28.09.2018
12:32:11

Constantine
28.09.2018
12:32:52
в итоге окажется что begin/end разных массивов :)

Pavel
28.09.2018
12:34:22
нет, кейс довольно простой - вектор, begin end, размер 8, видно что внутри end указатель как раз на begin + 8.
по коду там просто довольно лютая простыня
еще и с рекурсиями
ну если я накосячил где еще было бы хорошо об этом узнать
но прила однопоточная, что она тыкает в рандомную память врайтами маловероятно, магии типа корутин нет

Google

Pavel
28.09.2018
12:37:48
те вроде ничего не должно повлиять было, кроме компаратора

Andrey
28.09.2018
13:17:40

Igor
28.09.2018
13:18:29

Alex Фэils?︙
28.09.2018
13:20:00
https://herbsutter.com/2012/05/03/reader-qa-what-about-vc-and-c99/
> The C99 standard is interesting because it was created at a time when a lot of people on the previous committee (C89 — Ed.) went away and did other things. And it was a smaller group that came over who were interested in a special-purpose area, and so it ended up having a lot of things that were not of general-purpose interest. And in fact, when the current revision of C, which is being revised right now, was begun several years ago, one of the questions was "Should we roll back or undo some of the revisions we made in C99?" because the overreaching in C99 was recognized.
забавно

Constantine
28.09.2018
13:24:55

Alex Фэils?︙
28.09.2018
13:28:09

Pavel
28.09.2018
13:40:44

Ilia
28.09.2018
13:51:10

Pavel
28.09.2018
13:53:30

Ilia
28.09.2018
13:53:54

Pavel
28.09.2018
13:54:12
Ну да.
ну так и было. я не понял твой поинт.

Евгений
28.09.2018
13:54:59

Ilia
28.09.2018
13:55:23

Pavel
28.09.2018
13:56:01

Евгений
28.09.2018
13:56:13

Pavel
28.09.2018
13:57:50
на работке.
хм, nuff said. ну я имел ввиду - osx, linux/llvm gcc?

Евгений
28.09.2018
13:57:50
Если загуглить "stl comparator segfault" первая же ссыль на стековерфлоу ведет

Google

Евгений
28.09.2018
13:58:01

Pavel
28.09.2018
13:58:19

Ilia
28.09.2018
13:58:51

Евгений
28.09.2018
13:59:28

Ilia
28.09.2018
14:01:14
Почитаю...

Pavel
28.09.2018
14:03:46


Ilia
28.09.2018
14:04:33
достаточно. первая ссылка по предложенному мной запросу как раз про sort
Ну, это не падение, это выдача диагностики, я такое допускал выше.
/usr/local/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../../include/c++/4.1.2/debug/safe_iterator.h:240:
error: attempt to decrement a dereferenceable (start-of-sequence)
iterator.
Objects involved in the operation:
iterator "this" @ 0x0xbf4b0844 {
type = N11__gnu_debug14_Safe_iteratorIN9__gnu_cxx17__normal_iteratorIPPN15__gnu_debug_def6vectorIiSaIiEEEN10__gnu_norm6vectorIS7_SaIS7_EEEEENS4_IS7_SB_EEEE (mutable iterator);
state = dereferenceable (start-of-sequence);
references sequence with type `N15__gnu_debug_def6vectorIPNS0_IiSaIiEEESaIS3_EEE' @ 0x0xbf4b0844
}


Евгений
28.09.2018
14:07:42
там оптимизации, сдвиг итератора на определенное кол-во позиций влево-вправо без проверок
за границы выйти может - это точно. А вот упадет или нет - это уже да, вопрос

Ilia
28.09.2018
14:09:02
Ну, вы конечно можете оставаться со своим мнением...

Евгений
28.09.2018
14:10:57

Ilia
28.09.2018
14:11:47

Google

Pavel
28.09.2018
14:11:57

Евгений
28.09.2018
14:11:59

Ilia
28.09.2018
14:12:22

Евгений
28.09.2018
14:13:02
нет, ПОМИМО ЭТОГО
нет:D что можно сделать не так в коде, заполняющем контейнер, и делающем sort с компаратором?)

Timur
28.09.2018
14:16:42
а в какой версии компилятора vs?
ну я как-то пропустил точный момент, но вроде это было еще во времена VS2013 https://www.infoq.com/news/2013/07/vs2013_CPP_compliance

Евгений
28.09.2018
14:20:08
А в чем вопрос?
Инлайн пробовал, я его убрал на время перед скриншотом. Вопрос: почему так медленно вызывается функция или Что я делаю не так?

Ruslan
28.09.2018
14:22:19
Инлайн для того и придуман, чтобы замещать вызов тупым копированием пары строк кода

Евгений
28.09.2018
14:23:33
Всё так же

Ruslan
28.09.2018
14:24:32
Ну, во-первых, инлайн не даёт гарантию инлайнинга
Это рекомендация компилятору скорее
Во-вторых, хотелось бы увидеть код и результаты

Igor
28.09.2018
14:25:30
+ жирная ремарка линкеру "если увидишь N реализаций этой функции одновременно - не выдавай ошибку, оставь из N только 1 и ей пользуйся"

Ruslan
28.09.2018
14:25:39
На словах как-то непродуктивно

Евгений
28.09.2018
14:28:31

Ruslan
28.09.2018
14:29:05
зависит от компайлера наверное

Евгений
28.09.2018
14:30:05

Google

Pavel
28.09.2018
14:30:39
перед функцией надо написать

Ilia
28.09.2018
14:31:34

Евгений
28.09.2018
14:31:54
[[gnu::always_inline]] работает в гцц
окей, сап. Ещё вопрос: у меня интел проц, компилирую интел компилятором, а производительность меньше (тоже на скриншоте показал). В чём прикол? Написать разрабам тикет на это?

Evgeniy
28.09.2018
14:32:09

Ilia
28.09.2018
14:32:13

Ruslan
28.09.2018
14:32:20

Евгений
28.09.2018
14:32:39

Ilia
28.09.2018
14:32:46

Pavel
28.09.2018
14:33:10

Ruslan
28.09.2018
14:33:26
А если по топику, то у интело компайлера мильен флагов для тюнинга

Ilia
28.09.2018
14:35:35

Соломончик
28.09.2018
14:36:24

Ilia
28.09.2018
14:36:47

Ruslan
28.09.2018
14:38:57
С кода следует начинать 99% обсуждений

Pavel
28.09.2018
14:38:59

Evgeniy
28.09.2018
14:39:15

Ruslan
28.09.2018
14:39:42