
Konstantin
20.06.2018
10:51:12
или там в for ranged
да хз зачем - я откуда знаю какой у него юзкейз
просто после reserve(100) вектор не будет себя вести как вектор размера 100 вот и все

Vhäldemar
20.06.2018
10:52:24

Google

Matwey
20.06.2018
10:52:42
Мне нужен массив float-ов. Сначала заполнить, а потом отдать в C-шный API по указателю.

Vhäldemar
20.06.2018
10:52:43
а после ресайз?
ну так почему не ресайз?

Matwey
20.06.2018
10:53:16
Потому-что ресайз пойдет по всем элементам и будет их инициализировать нулем

Vhäldemar
20.06.2018
10:53:26
ты о производительности заботишься?

Matwey
20.06.2018
10:53:30
Да

Vyacheslav
20.06.2018
10:53:32

Vhäldemar
20.06.2018
10:53:52
ты померял и там действительно медленно?

Vyacheslav
20.06.2018
10:54:08
Вместо инициализотора (0.0f) подставить float(), чтобы 2 раза память не инициализировать.

Matwey
20.06.2018
10:54:14
медленно: у меня с back_inserter компилятор не хочет векторизовать цикл

Konstantin
20.06.2018
10:54:16
ну делай через fill + back_inserter

Vhäldemar
20.06.2018
10:54:47

Matwey
20.06.2018
10:54:55
Так тоже самое

Google

Matwey
20.06.2018
10:55:27
Я бы сделал через unique_ptr и new[]

Vhäldemar
20.06.2018
10:55:28
и с какими флажками?

Matwey
20.06.2018
10:55:56
gcc 7.2, размер динамический же
-O3 -DNDEBUG -std=gnu++11

Mikhail Voronov
20.06.2018
10:57:05

Vhäldemar
20.06.2018
10:57:11
что, реально, тормозит ресайз?
у тебя миллионы элементов?

Matwey
20.06.2018
10:57:50
У меня десятки тысяч, но этот код выполняется много раз

Vhäldemar
20.06.2018
10:58:56
memset и статческий массив
:)

Matwey
20.06.2018
10:59:28
не если бы я знал точный размер в рантайме - так бы и сделал
memset мне как раз не нужен
я в цикле знаю как его заполнить

Mikhail Voronov
20.06.2018
10:59:56
а зачем тебе именно std::vector, если ты будешь отдавать его сишной функции?

Matwey
20.06.2018
10:59:58
заполнять его два раза я не вижу ни какого смысла

Mikhail Voronov
20.06.2018
11:00:22
или ты потом тоже планируешь его использовать?

Matwey
20.06.2018
11:00:23
планирую выкинуть после использования

Google

Mikhail Voronov
20.06.2018
11:00:44
ну тогда не вижу причин не использовать std::unique_ptr<float[]>

Matwey
20.06.2018
11:01:23
пожалуй так и сделаю. спасибо

Mikhail Voronov
20.06.2018
11:03:20
просто если делать с reserve и data() потом у кого-нибудь при расширении может появиться соблазн дописать код с использованием существующего std::vector, у которого будет возвращающий не то метод size()

Matwey
20.06.2018
11:04:06

Assasin
20.06.2018
12:16:12

Mikhail Voronov
20.06.2018
12:16:33
а как сообщить разрабам VC++ о косяке в их реализации stl?

Aidar
20.06.2018
12:17:20
!important

Igor
20.06.2018
12:18:36

Mikhail Voronov
20.06.2018
12:19:02

Aidar
20.06.2018
12:19:10

Mikhail Voronov
20.06.2018
12:19:42
у _Inc тип size_t, а INT_MAX - это #define INT_MAX 2147483647

Alexey
20.06.2018
12:20:30
int _Inc = .. же в строке 14

Constantine
20.06.2018
12:20:32

Mikhail Voronov
20.06.2018
12:21:32

Aidar
20.06.2018
12:21:51
ммм какието размеры в интах

Mikhail Voronov
20.06.2018
12:21:51
std::string test_str((size_t)0xFFFFFFFF + 1, 'a');
std::stringstream strbuf(test_str);
strbuf.put('\0');
вот это на VS2017 падает

Constantine
20.06.2018
12:24:55

Google

Mikhail Voronov
20.06.2018
12:25:02
amd64 вестимо

Constantine
20.06.2018
12:25:22
т.е. size_t на 8, int на 4?

Mikhail Voronov
20.06.2018
12:25:48
ага

Vhäldemar
20.06.2018
12:34:26
а можно минемальный премер?
собствинного кода

Mikhail Voronov
20.06.2018
12:35:19
а какого именно кода?)

Vhäldemar
20.06.2018
12:35:43
ну твоего
который использует стл и падает

Admin
ERROR: S client not available

Mikhail Voronov
20.06.2018
12:37:28
но вот этот poc похоже не совсем из-за того косяка падает, я пока отлаживаю

Constantine
20.06.2018
12:38:29

Mikhail Voronov
20.06.2018
12:39:11
ок, спасибо), как доразберусь до конца, напишу им

Vhäldemar
20.06.2018
12:47:11
https://developercommunity.visualstudio.com/content/problem/102668/limited-maximum-length-of-stdstringstream-on-x64.html

Aidar
20.06.2018
12:47:41
вопрос
какого фига std не юзает std
стоило им дергать сишную дрисьню на которой возможна ошибка миграции вместо numeric limits?

Vhäldemar
20.06.2018
12:48:56
а кто работать
тогда будет

Aidar
20.06.2018
12:49:10
пахнет джавастайлом

Google

Vhäldemar
20.06.2018
12:49:24
пахнет карри
зато "гномиков считают" нормально
орнул
"""
The bad news is that there's not anything we can do about this limit until the next time we take an ABI break. In our implementation, stringbuf (which stringstream uses under the covers) does not actually store a basic_string inside -- it does its own buffer management. (No, I don't know why it does that) It uses the basic_streambuf's put area and get area to store the actual allocated buffer range, and the standard limits the size of the get and put areas in a streambuf to INT_MAX (because pcount() and similar return int).
"""

Mikhail Voronov
20.06.2018
12:51:40

Alexey
20.06.2018
12:51:54
а я вот хочу странное - я хочу typedef (ну или using blablabla =) наоборот. Такое бывает?
Хочу как-то так:
using F = std::function<int(int,double)>;
untypedef(F::result_type) Boo(untypedef(F::first_argument_type) a, untypedef(F::second_argument_type) b)
{
...
}
Такое бывает? Я очень странного хочу?

Vhäldemar
20.06.2018
12:52:40
с лимитами

Mikhail Voronov
20.06.2018
12:53:25
да, но они могут в текущей реализации, не изменяя ABI, в overflow size_t заменить на int

Alexey
20.06.2018
12:53:52

Vhäldemar
20.06.2018
12:53:54
могут, а могут и не могут

Igor
20.06.2018
12:56:48

Alexey
20.06.2018
12:57:09
а разве decltype можно скармливать тип?
decltype(int) — что даст?
кажется даст error

Igor
20.06.2018
12:58:10
можно decltype(int{})

Alexey
20.06.2018
12:59:36
можно decltype(int{})
Спасибо. Кажется работает ? Надо еще чекнуть что будет если нет дефолтного конструктора (типы могут быть не POD).

Constantine
20.06.2018
13:01:18

Vhäldemar
20.06.2018
13:01:34
какое ИДЕ?

Alexey
20.06.2018
13:01:39

Igor
20.06.2018
13:01:52