Size: a a a

ESP8266 & ESP32 [RU]

2021 February 18

AM

Aleksander Mironov in ESP8266 & ESP32 [RU]
Тип ни один компилятор в здравом уме не будет ее по значению в функцию пихать.
источник

AM

Aleksander Mironov in ESP8266 & ESP32 [RU]
PS я не беру во внимание, что строка ++ая сама по себе указатель и веселую обертку представляет над памятью в куче.
источник

AM

Aleksander Mironov in ESP8266 & ESP32 [RU]
Если бы вы в теории таки передали бы ее по значению каким то образом.
То конечно этот вариант был безумно медленнее
источник

AM

Aleksander Mironov in ESP8266 & ESP32 [RU]
PPS такое лучше в С++ конфе, там люди более правильно задвинут.
источник

С🥔

Скрудж 🥔 in ESP8266 & ESP32 [RU]
Slava Zagaynov
Коллеги, у меня два теоретических вопроса. Какой из вариантов:
1. жрет меньше памяти
2. выполняется быстрее
Компилятор сам эти оптимизации сделает. Глянь просто ассемблерный код
источник

РР

Ра Ра in ESP8266 & ESP32 [RU]
Slava Zagaynov
Коллеги, у меня два теоретических вопроса. Какой из вариантов:
1. жрет меньше памяти
2. выполняется быстрее
А в чем разница?
источник

SZ

Slava Zagaynov in ESP8266 & ESP32 [RU]
& *  сам не понимаю, ссылки / указатели,
попытался посмотреть уроки на ютубе, ни один гад не говорит нах они нужны
источник

РР

Ра Ра in ESP8266 & ESP32 [RU]
Строка что это ? Массив. имя массива это что? Указатель на первый элемент массива. Так получается вы написали одно и тоже по разному.
источник

РР

Ра Ра in ESP8266 & ESP32 [RU]
Обработка строк: стандартная библиотека string.h
https://prog-cpp.ru/c-string/
источник

РР

Ра Ра in ESP8266 & ESP32 [RU]
И я не совсем уверен, но для 2к текста надо аллокацию с обработкой результата.
источник

AM

Aleksander Mironov in ESP8266 & ESP32 [RU]
А причем тут С строка, если у него С++ код?
источник

РР

Ра Ра in ESP8266 & ESP32 [RU]
Aleksander Mironov
А причем тут С строка, если у него С++ код?
- А... - точно!!!! Это в корне меняет дело :))))
источник

РР

Ра Ра in ESP8266 & ESP32 [RU]
Ра Ра
И я не совсем уверен, но для 2к текста надо аллокацию с обработкой результата.
На ++ не надо.
источник

Сᅠ

Снежинкаᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ... in ESP8266 & ESP32 [RU]
Slava Zagaynov
Коллеги, у меня два теоретических вопроса. Какой из вариантов:
1. жрет меньше памяти
2. выполняется быстрее
1 правильнее вариант
источник

Сᅠ

Снежинкаᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ... in ESP8266 & ESP32 [RU]
Slava Zagaynov
Коллеги, у меня два теоретических вопроса. Какой из вариантов:
1. жрет меньше памяти
2. выполняется быстрее
Ну в данном случае во втором примере происходит передача в функцию значения(строки), то есть создаеться новая локальная переменная, которая будет кушать больше памяти и поэтому из-за этих телодвижений выполнение проги будет дольше. В данном случае этого конечно не заметить, но все же
источник

Сᅠ

Снежинкаᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ... in ESP8266 & ESP32 [RU]
По указателям и адресам могу подробнее рассказать в лс
источник

Сᅠ

Снежинкаᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ... in ESP8266 & ESP32 [RU]
хотя и тут могу
источник

Сᅠ

Снежинкаᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ... in ESP8266 & ESP32 [RU]
Slava Zagaynov
& *  сам не понимаю, ссылки / указатели,
попытался посмотреть уроки на ютубе, ни один гад не говорит нах они нужны
В первом примере мы в функцию передаем не саму переменную (строку текста), а лишь её адрес в памяти. Адрес начала массива. Для этого при передаче адреса и используеться знак &.
Но нам нужно как-то работать с этим адресом, потому что если просто вывести значение переменной, то мы по сути выведем её адрес в памяти, и увидим что-то типа "0x7ffd8d5fe92c".
Для того, чтобы прочитать значение этого адреса как раз и используеться указатель (символ *). Это позволяет хранить 1 ячейку памяти массива и работать с ним
источник

Сᅠ

Снежинкаᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ... in ESP8266 & ESP32 [RU]
Так же при передаче через адрес при изменении локальной переменной в функции, изменяеться ещё и значение той переменной, которую передавали(в вашем случае переменная в теле setup()). Поэтому если не собираемся изменять это значение в функции, а только прочитать его (или вывести), нужно дописать const, что будет запрещать изменение этой переменной. Таким образом происходит экономия памяти и времени, что незаменимо, когда её мало (например при работе с attiny13/85).
источник

Сᅠ

Снежинкаᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ... in ESP8266 & ESP32 [RU]
void Serialprint(const String *txt )
источник