reserve() толь работает, толь нет.
- Войдите на сайт для отправки комментариев
Чт, 07/04/2022 - 14:57
Пытался сам разобраться, как оно работает, но мозг моментально закипел.
Исходный код:
String buf; Serial.print(F("buf.reserve(626); ")); Serial.println(buf.reserve(626)); buf ="{\n"; buf = buf + " \"devices\": [\n"; buf = buf + " {\n"; buf = buf + " \"mac\": \""; и тд
Отладка:
buf.reserve(626); 1 [String] Reallocating large String(138 -> 160 bytes) '{ "devic ... { '........ куча подобного ......... [String] Reallocating large String(620 -> 626 bytes) '{ "devic ... } ] '
Получается, что reserve() не работает? Почему? Или забить болт и не обращать внимание?
PS Arduino IDE 1.8.19 /ESP8266
а цель-то в чем?
Вы в курсе, что String и без reserve() автоматически расширяет размер, если вы увеличиваете длину строки? -тогда нафига эта резервация?
Наверно +=, всё же.
Наверно +=, всё же.
хм, а оптимизатору не все равно - buf = buf+... или buf+=... ?
Оптимизатор такие вещи не пережевывает сам по себе, это не примитивный тип. Можно для него написать определенных подсказок, но их нет, потому что библиотека arduino написана под C++03, где такого еще не было.
А что reverse делается и печатается для пустой строки, а потом уже со строкой манипуляции проходят?
Если нет, то будьте так любезны выложить актуальный код полностью, без и т.д.
Наверно +=, всё же.
Так всё заработало. Спасибо!
Так всё заработало. Спасибо!
вопросов стало еще больше... что именно заработало? Если вы про код - а раньше он не работал, что ли?