Неужели LwIP съедает целых 26 Кб?
Для его нормальной работы требуется более 128 килобайт. Без них - только с нарушением стандартов.
Для детских поделок - пойдет и то что есть. Но в реальный мир инета такое включать не следует - будут вечные "падения" и т.д..
Разница в памяти (RAM а не кода) C++ и C вообще сомнительна, и если она и есть, то составляет единицы-десятки байт (например таблицы виртуальных функций). Чем именно C++ усугубляет проблему?
Разумеется можно писать на нем криво. Ну так это и на асме можно
Вот эти пару байт и нужны для реализации простого соединения по TCP на модуле ESP8266.
Иначе это выйдет программа на С++ выводящая "HelloWorld" и больше ничего не делающая.
Зачем такой C++ на котором требуется извращаться, чтобы написать что-то более чем "HelloWorld" ?
Почему тогда сразу не интерпретатор 'бэйсика' или 'явы' или 'фортрана' ... ?
Таблицу виртуальных функций требуется обслуживать. Часть кода для реализации C++ придется переносить в iram. А там уже нет места. У Lua писателей уже давно стоит проблема в размере кода - он не лезет в стандартную flash модуля и там реализовать что-то более настроек WiFi ничего не возможно. Ну типа только послать пакет UDP что модуль умер
Если вы считать не умеете, то сосчитаю за вас:
К примеру 34 кило байта – это 170 закрытых соединений TCP за 2 минуты LwIP-пом. При наличии espconn и прочих надстроек над LwIP-ом, это ещё сокращается и всё равно менее, т.к. нужен хоть малый буфер для разбора ... Для TCP стека LwIP должен держать на каждое соединение буфер не менее 8 кило. 4-ре разрешенных открытых соединения в espconn= вся память в нуль и в процессе приема espconn переливает последний mss (1450 байт) через память (т.е. имеем дубли). По тому только UDP
и то там требуются динамические буфера…
У вас стоит роутер с фильтрацией и глушением радиэфира от внешних запросов к модулю?
Если нет, то для реализации на C++ предусмотрите закрытие всех соединений у LwIP, когда откроется ваше соединение. Чтобы больше ничего не смогло открыться пока вы обрабатываете запрос
. DHCP и прочее тоже придется закрыть. Только тогда хватит памяти, с учетом тех пару в "
таблице виртуальных функций".
Вы сами себе урезаете функционал модуля, за счет внедрения C++.
Мотивы
jcmvbkbc понятны - чисто спортивный интерес по компилятору.