Size: a a a

2020 August 18

NP

Nikita Provotorov in pro.cxx
ну а если длина вьюхи больше 100 то можно и зафолбэчить на создание std string
источник

ГH

Гласси Hudobin in pro.cxx
Это у человека просто вау-эффект от вьюх не прошел.
источник

AK

Andrei K in pro.cxx
Nikita Provotorov
а что если на стеке выделить скажем 100 байт, туда скопировать содержимое вьюхи и добавить ноль в конец
А я как сказал?
источник

AK

Andrei K in pro.cxx
Переслано от Andrei K
Гениально. Но нет, спасибо. Я не хочу выделять память. У меня нигде память в парсинге не выделяется.
источник

AK

Andrei K in pro.cxx
Переслано от Andrei K
Чуть более приемлемо временный буффер на стеке создать и туда скопировать, но тоже плохое решение.
источник

ГH

Гласси Hudobin in pro.cxx
Andrei K
Переслано от Andrei K
Гениально. Но нет, спасибо. Я не хочу выделять память. У меня нигде память в парсинге не выделяется.
The number of buckets is automatically increased as elements are added to an unordered associative container,
источник

AK

Andrei K in pro.cxx
Я ждал, когда кто-нибудь это спросит :)
источник

NP

Nikita Provotorov in pro.cxx
Andrei K
А я как сказал?
а, не заметил, сорян
источник

K

Konstantin in pro.cxx
не выделяется память при парсинге json?
источник

ГH

Гласси Hudobin in pro.cxx
Еще раз советую использовать вектор с SSO.
источник

AK

Andrei K in pro.cxx
У меня tape allocator / arena allocator
источник

AK

Andrei K in pro.cxx
Память один раз выделяется, а затем в неё просто последовательно дописывается всё что надо как на ленту (отсюда название Tape Allocator) Можно посмотреть на rapidjson, к примеру
источник

AL

Anton Lashkov in pro.cxx
Andrei K
Я пользовался, дропнул boost::coro в сторону boost::context::callcc совмещённый с async вызовами. В целом общая рекомендация не делать больших контекстов, не вызывать рекурсивные функции, дробить контексты на более мелкие, и вообще аккуратно относиться к коду. Но если это лень делать или просто не времени, то как я уже упомянул callcc поддерживает фичу “segmented stacks” это ровно то, что надо.
Спасибо, посмотрю в сторону callcc, но вот segmented stacks я так понял под виндой не работают.
источник

AK

Andrei K in pro.cxx
Anton Lashkov
Спасибо, посмотрю в сторону callcc, но вот segmented stacks я так понял под виндой не работают.
Увы. Вариант только выделять побольше. Еще у callcc есть возможность на старте на стеке корутины выделить объекты заранее, если это чем-то поможет.
источник

AK

Andrei K in pro.cxx
Но вообще странно. Что в корутине может такого делаться, что стека не хватает? Рекурсии точно нигде нет случайно?
источник

AL

Anton Lashkov in pro.cxx
Обычно проблема всплывает когда из сторонней закрытой либы функции вызвываю, путем тестирования выясняется что она ест много стека, он расширяется, но потом это сакральное знание о функции благополучно забывается)
источник

AL

Anton Lashkov in pro.cxx
И в следующий раз проблема снова может всплыть на другом проекте
источник

AK

Andrei K in pro.cxx
Гласси Hudobin
The number of buckets is automatically increased as elements are added to an unordered associative container,
источник

AK

Andrei K in pro.cxx
Anton Lashkov
Обычно проблема всплывает когда из сторонней закрытой либы функции вызвываю, путем тестирования выясняется что она ест много стека, он расширяется, но потом это сакральное знание о функции благополучно забывается)
Да, со сторонними библиотеками такая беда бывает.
источник

AK

Andrei K in pro.cxx
Возможно стоит их вызовы класть в отдельную корутину, и по надобности йелдить их оттуда.
источник