@ProCxx

Страница 2145 из 2477
Konstantin
20.06.2018
10:51:12
или там в for ranged

да хз зачем - я откуда знаю какой у него юзкейз

просто после reserve(100) вектор не будет себя вести как вектор размера 100 вот и все

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
Да

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

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

Я бы сделал через unique_ptr и new[]
Но что-то некрасиво

Mikhail Voronov
20.06.2018
10:57:05
Потому-что ресайз пойдет по всем элементам и будет их инициализировать нулем
тот редкий случай, когда можно подумать в сторону std::unique_ptr<float[]>

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
а зачем тебе именно std::vector, если ты будешь отдавать его сишной функции?
чтобы память динамически выделил мне. больше не зачем

планирую выкинуть после использования

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()

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
а как сообщить разрабам VC++ о косяке в их реализации stl?
Так же как и про все остальные косяки, через большую кнопку "Send Feedback".

Mikhail Voronov
20.06.2018
12:19:02
а как сообщить разрабам VC++ о косяке в их реализации stl?
меня же не подводят глаза, вот тут в 19 строке есть переполнение же? https://pastebin.com/6jCvwqf8

Aidar
20.06.2018
12:19:10
а как сообщить разрабам VC++ о косяке в их реализации stl?
сообщите им там что у них imbue локали не хватает чтобы выводить буквы в консоль

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
у _Inc тип size_t, а INT_MAX - это #define INT_MAX 2147483647
а что это за код вообще? откуда?

Mikhail Voronov
20.06.2018
12:21:32
int _Inc = .. же в строке 14
не то скопировал https://pastebin.com/5089W2ay

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

Mikhail Voronov
20.06.2018
12:21:51
а что это за код вообще? откуда?
последнее из sstream, первое из strstream

std::string test_str((size_t)0xFFFFFFFF + 1, 'a'); std::stringstream strbuf(test_str); strbuf.put('\0');

вот это на VS2017 падает

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
std::string test_str((size_t)0xFFFFFFFF + 1, 'a'); std::stringstream strbuf(test_str); strbuf.put('\0');
я же скидывал #include <sstream> int main() { std::string test_str((size_t)0xFFFFFFFF + 1, 'a'); std::stringstream strbuf(test_str); strbuf.put('\0'); }

но вот этот poc похоже не совсем из-за того косяка падает, я пока отлаживаю

Constantine
20.06.2018
12:38:29
но вот этот poc похоже не совсем из-за того косяка падает, я пока отлаживаю
https://developercommunity.visualstudio.com/spaces/62/index.html репортить сюда ^ очень похоже, что INT_MAX это ошибка миграции

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
https://developercommunity.visualstudio.com/content/problem/102668/limited-maximum-length-of-stdstringstream-on-x64.html
хм, похожий кейс, но тут просто вопрос в том, что нельзя строку больше 2Гб хранить, а переполнение в overflow может привести к уязвимости

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) { ... } Такое бывает? Я очень странного хочу?

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

Alexey
20.06.2018
12:53:52
а я вот хочу странное - я хочу 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) { ... } Такое бывает? Я очень странного хочу?
Поясню за юзкейс: "untypedef" тут для того, чтобы всякие IDE в автокомплите реальные типы показывали у аргументов, а не F::first_argument_type , что пользователю будет не понятно.

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

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).

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

Alexey
20.06.2018
13:01:39
это к IDE вопрос
А как тут IDE разберется что именно ей показывать?

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