romanetz
74HC02?
romanetz
SetPf
74HC02?
Это было оскорбление и неуважнеие к небинарным личностям! 74HCT4002!
Slava
Коллеги, у меня два теоретических вопроса. Какой из вариантов:
1. жрет меньше памяти
2. выполняется быстрее
SetPf
Тип ни один компилятор в здравом уме не будет ее по значению в функцию пихать.
SetPf
PS я не беру во внимание, что строка ++ая сама по себе указатель и веселую обертку представляет над памятью в куче.
SetPf
Если бы вы в теории таки передали бы ее по значению каким то образом.
То конечно этот вариант был безумно медленнее
SetPf
PPS такое лучше в С++ конфе, там люди более правильно задвинут.
Ivan
Void
Slava
& * сам не понимаю, ссылки / указатели,
попытался посмотреть уроки на ютубе, ни один гад не говорит нах они нужны
Void
Строка что это ? Массив. имя массива это что? Указатель на первый элемент массива. Так получается вы написали одно и тоже по разному.
Void
Обработка строк: стандартная библиотека string.h
https://prog-cpp.ru/c-string/
Void
И я не совсем уверен, но для 2к текста надо аллокацию с обработкой результата.
SetPf
А причем тут С строка, если у него С++ код?
Void
Arhiopteryx
Arhiopteryx
По указателям и адресам могу подробнее рассказать в лс
Arhiopteryx
хотя и тут могу
Arhiopteryx
& * сам не понимаю, ссылки / указатели,
попытался посмотреть уроки на ютубе, ни один гад не говорит нах они нужны
В первом примере мы в функцию передаем не саму переменную (строку текста), а лишь её адрес в памяти. Адрес начала массива. Для этого при передаче адреса и используеться знак &.
Но нам нужно как-то работать с этим адресом, потому что если просто вывести значение переменной, то мы по сути выведем её адрес в памяти, и увидим что-то типа "0x7ffd8d5fe92c".
Для того, чтобы прочитать значение этого адреса как раз и используеться указатель (символ *). Это позволяет хранить 1 ячейку памяти массива и работать с ним
Arhiopteryx
Так же при передаче через адрес при изменении локальной переменной в функции, изменяеться ещё и значение той переменной, которую передавали(в вашем случае переменная в теле setup()). Поэтому если не собираемся изменять это значение в функции, а только прочитать его (или вывести), нужно дописать const, что будет запрещать изменение этой переменной. Таким образом происходит экономия памяти и времени, что незаменимо, когда её мало (например при работе с attiny13/85).
Arhiopteryx
void Serialprint(const String *txt )
Arhiopteryx
SetPf
Если уж на то пошло, правильно - по ссылке.
Arhiopteryx
SetPf
Насколько мне известно - уже давно не надо для микрооптимизаций писать консты. Все это анализируется компилятором и генерируется код в зависимости от контекста (изменяется строка внутри или же нет)
Для чего действительно нужно писать консты у всего подряд - так, для безопасности.
Вообще все это анахронизм, оптимизация необходима тогда когда она явно необходима.
Но я еще раз советую автору для наиболее верного и обоснованного ответа таки с таким в С++ кофну.
Этот простой вопрос в силу языка имеет гору подводных камней, на которые мне - стремно отвечать.
Arhiopteryx
Arhiopteryx
Slava
Я вас услышал, спасибо, для чистоты эксперимента я попробую сделать вариант свого говнокода ссылками/указателями, к счастью есть фукнция поиска-замены в любом редакторе. О результатах тестировения сообщу.
Anton
1 правильнее вариант
спорно. в современном с++ есть такая штука — мув конструктор: https://habr.com/ru/post/174019/
Anton
если коротко, то мув конструктор позволяет передавать обекты в функцию или возвращать из функции "по значению", но при этом перемещаются указатели на данные между "объектам", что владелец данных всегда остаётся только один и не происходит копирования данных
Arhiopteryx
Anton
синглтон — другой паттерн
Anton
Ivan
Конструктора копирования?) Это как?
Anton
в приведённой картинке был объект строки
Anton
про нативные массивы я ничего не говорил
Ivan
У вас либо есть
integer a[10000];
Тогда вы можете либо:
f(a)
либо:
f(&a)
Я не знаю научили ли компиляторы решать (вдруг -О3 уже умеет) проблему передачу ссылки в кейсе a = f(a), но обычно в функции создается копия массива. Никаких конструкторов копирования в природе не существует) Либо вы знаете чего-то, чего не знаю и буду признателен за ссылку на что же такое конструкторы копирования
Ivan
Да, все так говорите
Anton
вообще, странно говорить о строке, как о массиве символов на языке Си (без ++). мы же давно уже не пользуемся однобайтовой koi8-r или cp1251
Ivan
Прошу прощения тогда, потому что я уже не изучал с и кресты с 2016 года, пересел на пайтон и другие более высокоуровневые яп. Забыл большинство терминов
Anton
я, кстати, давно не сталкивался с современными строками на Си, больше по другим ЯП был... wchar_t мне как-то не понятен, он какие кодепоинты то содержит?
Anton
Anton
wchar_t - type for wide character representation (see wide strings). Required to be large enough to represent any supported character code point (32 bits on systems that support Unicode. A notable exception is Windows, where wchar_t is 16 bits and holds UTF-16 code units)
Anton
какое-то определение за гранью добра
Sid
Что не так
Sid
Sid
Anton
мой вопрос касается, к примеру, работы со шрифтами. если я хочу выводить русский текст, мне нужны соответственные кодепоинты. ну, допустим, я беру utf-32, получается, мне надо описать глифы для этих кодепоинтов, а при выводе текста переводить из uf8 в utf32 каждый символ и искать каждый глиф по массиву.... ну такое себе...
Sid
Sid
Тулкиту
Anton
но если у меня wchar_t, то я даже не знаю что за кодепоинты у меня есть
Anton
то ли они utf-32, то ли utf-16
Sid
Что поделать, боль кодовых страниц жива просто спрятана от простых смертных
Anton
ну вот о том моя печаль
Anton
когда битность определена
Anton
с другой стороны, 32 бита на каждый символ тоже так себе, utf8 начинает иметь смысл даже для хранения текста, но кодепоинты из него доставать тоже надо, которые могли бы быть напрямую отражены в ютф-16 или 32
Null
https://hackaday.com/2021/02/18/laser-galvos-and-an-esp32-recreate-old-school-asteroids/
Вадим
Esp32 модуль. Подскажите схему как распаять на прошивку, перезагрузку. Схему не могу подыскать. Типа как по есп8266 есть.
Вадим
Вадим
Типа такого 👆, только для есп32
Вадим
HTB1CsqidRGE3KVjSZFhq6AkaFXaL.jpg_640x640Q90.jpg_.webp (640×640)
Владимир
вроде больше ничего не надо
Дмитрий
Вадим
А ресет как организовать?
ㅤ
Dmitriy
Две кнопки: ресет и гпо0, зажимаете гпо0 и перегружаете решетом, потом отпускаете обе, мк в режим загрузки перегружается, после залития прошивки сново перегружаете Неметом
Dmitriy
Ресетом
Boris68
Доброго утра, есть активные пользователи приложения VIRTUINO, как инвертировать кнопки/переключатели для управления(включения) реле низким уровнем?
Void
1 правильнее вариант
:) первый вариант передает указатель. Второй ссылку. Тип string позволяет работать с строкой как с массивом.