esaulenka 7 29 ноября, 2022 Опубликовано 29 ноября, 2022 · Жалоба 42 minutes ago, gazpar said: Вот есть у меня код, при вырубании exceptions & RTTI размер бинаря получается 350кБ. А это черезчур много для имплементированого функционала. Поэтому хочу найти легковесную замену либе, идущую вместе с тулчейном GCC. Для начала понять бы, что именно у вас там такое большое. По опыту - всякие "излишние" фичи стандартной библиотеки занимают десяток кБ, не больше. Я пользовался этим рецептом: (что-то не могу найти его где-нибудь на гитхабе...) Но, повторюсь, магической экономии сотни килобайт он не даст, надо разбираться, что вы такое сделали. У меня прошивки в 300 килобайт ни разу не получались. Хотя не один год старался, писал 🙂 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gazpar 1 29 ноября, 2022 Опубликовано 29 ноября, 2022 · Жалоба On 11/29/2022 at 6:51 PM, VladislavS said: Какой функционал из стандартной библиотеки у вас используется? Ну чтобы понять масштаб проблемы. Я вот только вчера к AVR-GCC прикрутил Libstdc++ версии 20201103. Использую по полной C++20 type_traits, concepts и т.д. Ни одного лишнего байте в прошивку не попало. Именно поэтому и хочу найти лёгкую либу. Т.к. я не знаю, чего там наворотили коллеги(высокоуровневые программисты). Мне же нужно оптимизировать внутреннюю либу сделанную коллегами. Ключами компиляции/линковки удалось ужать до 350кБ. Изначально она сжирала 1.2МБ. On 11/29/2022 at 6:51 PM, haker_fox said: Какой ARM: ARM7TDMI, Cortex-M0/3/4(F), Cortex-Ax? У нас на работе при использовании и более серьёзного функционала, который я лично не приветствую (std::map, std:;string, std::vector) всё укладывается в 64 кБайта. Правда речь снова про IAR - наш корпоративный стандарт. Может быть Вам следует поизучать документацию на компилятор и линкер, и дать им необходимые ключи? К сожалению, я не работаю с GCC. Но по опыту знаю, что неверная конфигурация инструментария может привести к разбуханию кода. Cortex-M4 On 11/29/2022 at 6:58 PM, jcxz said: 350кБ - это ещё постараться нужно, чтобы столько нашкодить! Разве что какие-то данные включены туда (типа картинок). Но при чём тогда "библиотеки"? Вообще непонятно... Ото-ж! Чё-то темнит ТС... Вы о чём вообще? Темнит... Запрос у меня на легковесную либу, а не на сбор анамнеза. On 11/29/2022 at 7:10 PM, esaulenka said: Для начала понять бы, что именно у вас там такое большое. По опыту - всякие "излишние" фичи стандартной библиотеки занимают десяток кБ, не больше. Я пользовался этим рецептом: (что-то не могу найти его где-нибудь на гитхабе...) Но, повторюсь, магической экономии сотни килобайт он не даст, надо разбираться, что вы такое сделали. У меня прошивки в 300 килобайт ни разу не получались. Хотя не один год старался, писал 🙂 Благодарю за ссылку, почитаю. Пример. Со включёнными RTTI и exceptions размер толстеет в 2 раза. Т.е. с 350кБ до 700кБ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 29 ноября, 2022 Опубликовано 29 ноября, 2022 · Жалоба 7 minutes ago, gazpar said: не сбор анамнеза Ну вот и получили гадание на кофейной гуще... Попробуйте лучше погадать на map-файле, там хоть будет видно, что сколько занимает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 29 ноября, 2022 Опубликовано 29 ноября, 2022 · Жалоба 15 минут назад, gazpar сказал: Именно поэтому и хочу найти лёгкую либу Да не бывает лёгких и тяжёлых стандартных библиотек. Все они плюс/минус одинаковые, так как реализуют одинаковый функционал, заданный стандартом языка программирования. 15 минут назад, gazpar сказал: Т.к. я не знаю, чего там наворотили коллеги Ну посмотрите map-файл хотя бы, что там весит столько. 15 минут назад, gazpar сказал: Мне же нужно оптимизировать внутреннюю либу сделанную коллегами. Вот они обрадуются когда какой-нибудь класс перестанет работать из-за вашей "оптимизации". И почему вместо этого вы решили стандартную библиотеку оптимизировать? Её явно не дураки писали - там всё в порядке. Пусть ваши коллеги свой код и оптимизируют. 15 минут назад, gazpar сказал: Ключами компиляции/линковки удалось ужать до 350кБ. Можно глянуть на ключи? Похоже? CPP_FLAGS := -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -Wall LD_FLAGS := -Wl,--gc-sections -nostartfiles -specs=nano.specs -specs=nosys.specs Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 241 29 ноября, 2022 Опубликовано 29 ноября, 2022 · Жалоба 28 минут назад, gazpar сказал: Вы о чём вообще? Темнит... Запрос у меня на легковесную либу, а не на сбор анамнеза. О содержимом "либы". Что за либа? Что она делает? Предлагаете играть в угадайку? "Темните", потому что мне сложно представить - какой именно КОД требует столько места??? С данными понятно, но вы же утверждаете, что там именно код. Да, конечно, можно наверное в свойствах оптимизатора включить какой-нить unrolling циклов, так что они распухнут в линейные простыни. Но такое можно сделать, имхо, только преднамеренно... 13 минут назад, VladislavS сказал: Вот они обрадуются когда какой-нибудь класс перестанет работать из-за вашей "оптимизации". Вангую, что один из "высокоуровневых программистов" ТС запилил туда фотку своего любимого кота. От того и 1.2МБ образовалось... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 29 ноября, 2022 Опубликовано 29 ноября, 2022 · Жалоба Это точно. 350к кода это год писать не разгибаясь 🙂 Хотя, с дуру и хрен сломать можно. Вот, например, реализация USB-CDC c "C++ на максималке". 2340 байт, из которых только таблица векторов прерываний 400 байт. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gazpar 1 29 ноября, 2022 Опубликовано 29 ноября, 2022 · Жалоба On 11/29/2022 at 7:53 PM, esaulenka said: Ну вот и получили гадание на кофейной гуще... Попробуйте лучше погадать на map-файле, там хоть будет видно, что сколько занимает. Вот и удивляюсь. Вопрошание было на либу, которой можно заменить. В ответ же только вопросы: "зачем оно надо?" Уже гадаю. Но всё равно спасибо! On 11/29/2022 at 7:55 PM, VladislavS said: Да не бывает лёгких и тяжёлых стандартных библиотек. Все они плюс/минус одинаковые, так как реализуют одинаковый функционал, заданный стандартом языка программирования. Бывают. В начале темы x893 сказал, что их вообще тьма тьмущая. Только вот у меня их найти как-то не выходит особо. Quote Вот они обрадуются когда какой-нибудь класс перестанет работать из-за вашей "оптимизации". И почему вместо этого вы решили стандартную библиотеку оптимизировать? Её явно не дураки писали - там всё в порядке. Пусть ваши коллеги свой код и оптимизируют. На то и расчёт. Начнут применять стрикции, чтобы войти в доступное подмножество. Quote Можно глянуть на ключи? Похоже? CPP_FLAGS := -ffunction-sections -fdata-sections -fno-exceptions -fno-rtti -Wall LD_FLAGS := -Wl,--gc-sections -nostartfiles -specs=nano.specs -specs=nosys.specs Да, подобные ключи. On 11/29/2022 at 8:05 PM, jcxz said: О содержимом "либы". Что за либа? Что она делает? Предлагаете играть в угадайку? "Темните", потому что мне сложно представить - какой именно КОД требует столько места??? С данными понятно, но вы же утверждаете, что там именно код. Вангую, что один из "высокоуровневых программистов" ТС запилил туда фотку своего любимого кота. От того и 1.2МБ образовалось... Если бы. Аллокаторы, строки, принты и прочие потроха. Но в стиле десктопной разработки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 29 ноября, 2022 Опубликовано 29 ноября, 2022 · Жалоба Только что, gazpar сказал: Вопрошание было на либу, которой можно заменить. В ответ же только вопросы: "зачем оно надо?" Потому что глупо искать там где светлее, а не там где потерял. 1 минуту назад, gazpar сказал: Только вот у меня их найти как-то не выходит особо. Ну я использую стандартные библиотеки идущие в комплекте с GCC, IAR и ARMClang. Ничем они не отличаются особо. Да и прибиты к тулчейну основательно так, не перенесёшь. Других вариантов не знаю. Да и не нужны они. Лучще разберитесь что в проекте пожирает ресурсы. 8 минут назад, gazpar сказал: Начнут применять стрикции, чтобы войти в доступное подмножество. Лучше вместе сядьте и разберитесь какие тяжёлые вещи они применяют. А то может они и правда как на PC программируют и никакой библиотекой это не исправишь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gazpar 1 29 ноября, 2022 Опубликовано 29 ноября, 2022 · Жалоба On 11/29/2022 at 8:26 PM, VladislavS said: Потому что глупо искать там где светлее, а не там где потерял. Глупо не глупо, зато радикально. Quote Лучше вместе сядьте и разберитесь какие тяжёлые вещи они применяют. А то может они и правда как на PC программируют и никакой библиотекой это не исправишь. Это и есть прямой вариант. Долгий и нудный. Который уже применяется. А либа, с порезаным функционалом, сразу накидает им сообщений об ошибках. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 29 ноября, 2022 Опубликовано 29 ноября, 2022 · Жалоба Сообщение об ошибке это слишком просто. Надо так сломать, чтобы оно просто потихуши коварно не работало. И бежать. Раз по хорошему договориться не можете. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 29 ноября, 2022 Опубликовано 29 ноября, 2022 · Жалоба 58 minutes ago, gazpar said: Уже гадаю. Выше Вам справедливо предложили посмотреть в map-файл. Посмотрели? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gazpar 1 29 ноября, 2022 Опубликовано 29 ноября, 2022 · Жалоба В общем, просьба модераторам, Закрывайте тему пожалуйста. Ни одного совета либы на замену стандартной в GCC тулчейне за 2 страницы так и не посоветовали. Очень сомневаюсь, что кто-то что-то порекомендует. Всем спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 29 ноября, 2022 Опубликовано 29 ноября, 2022 · Жалоба 6 minutes ago, gazpar said: Закрывайте тему пожалуйста. Каждый пользователь, создавший тему, может закрыть её сам. Вверху есть кнопка "Опции модератора"/Moderation Actions. Там Вы можете самостоятельно закрыть тему. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 29 ноября, 2022 Опубликовано 29 ноября, 2022 · Жалоба 1 час назад, gazpar сказал: Если бы. Аллокаторы, строки, принты и прочие потроха. Но в стиле десктопной разработки. А виновата, конечно, стандартная библиотека. Дурдом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gazpar 1 1 декабря, 2022 Опубликовано 1 декабря, 2022 · Жалоба Удалось найти порезаную либу. В собраном виде 160кБ и abi 15кБ. https://github.com/embeddedartistry/libcpp Основана на clang'е, если правильно понял. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться