|
Embedded C++, Кто какие библиотеки использует? |
|
|
|
 |
Ответов
|
Sep 5 2012, 23:51
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
Да, Си++ иногда тянет за собой кучу ненужного и тяжелого (полагаю, что и Си иногда тоже). На AVR я с этим не сталкивался, но столкнулся на ARM7TDMI, когда захотел использовать динамическую память (оператор new). Как только использовал, так код с 40 кБ вырос до 300 кБ. Пока чихаю на это, т.к. идет отладка. Но потом хочу прикрутить "легкую" реализацию менеджера памяти, любезно представленного уважаемым zltigo, и не менее любезно адаптированным к Си++ уважаемым Сергеем Борщем. От исключений пока отказался, там что-то чудесное и невероятное творится как с размером, так и компиляцией. Но мне оно сейчас не особо нужно, а вот без динамического выделения памяти очень плохо.
Как-то так.
Ну в общем подходишь к этому вопросу с необходимой долей разума. Где готовое используешь, где адаптируешь, где свое накропаешь)
--------------------
Выбор.
|
|
|
|
|
Sep 7 2012, 05:16
|

Местный
  
Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091

|
Цитата(haker_fox @ Sep 6 2012, 04:51)  Да, Си++ иногда тянет за собой кучу ненужного и тяжелого А что именно? Мне кроме исключений (которые можно отключить при компиляции) ничего в голову не приходит... Цитата(haker_fox @ Sep 6 2012, 04:51)  На AVR я с этим не сталкивался, но столкнулся на ARM7TDMI, когда захотел использовать динамическую память (оператор new). Как только использовал, так код с 40 кБ вырос до 300 кБ. Пока чихаю на это, т.к. идет отладка. Но потом хочу прикрутить "легкую" реализацию менеджера памяти, любезно представленного уважаемым zltigo, и не менее любезно адаптированным к Си++ уважаемым Сергеем Борщем. Сейчас провел "экспресс-тест". Весь код программы, использующей new и delete, составил меньше 9 килобайт (arm7tdmi). Почему у Вас new/delete потянули дополнительные 260 килобайт, ума не приложу. Тем более, что Вы не используете исключения... В любом случае, к языку C++ как таковому это не имеет отношения. Напротив, наличие в языке этих операторов (и, главное, возможность их перегружать по своему усмотрению) дает программисту возможность более тонко контролировать работу с памятью. В тривиальном случае new/delete могут работать через malloc/free и, таким образом, ничем не будут отличаться от аналогичного кода на языке C. Ничего "ненужного" эти операторы сами по себе не "тянут".
--------------------
Всего наилучшего, Alex Mogilnikov
|
|
|
|
|
Sep 9 2012, 00:58
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
QUOTE (alx2 @ Sep 7 2012, 14:16)  Почему у Вас new/delete потянули дополнительные 260 килобайт, ума не приложу. А вот и я не знаю... но стоит убрать эти операторы, как код становится 40 кБ... С другой стороны, не зря же свои менеджеры памяти "выдумывают", значит проблема есть... З.Ы. Компилятор у меня Code Sourcery...
--------------------
Выбор.
|
|
|
|
|
Sep 10 2012, 05:11
|

Местный
  
Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091

|
Цитата(haker_fox @ Sep 9 2012, 05:58)  А вот и я не знаю... но стоит убрать эти операторы, как код становится 40 кБ... Но Вы-то, в отличие от нас, узнать это можете - достаточно заглянуть в map-файл... Вы, надеюсь, использовали nothrow-версию оператора new? А вот с такими реализациями: Код void * operator new(size_t n) throw() { return malloc(n); } void operator delete(void *p) { free(p); } тоже тянет 260 кбайт? Цитата(haker_fox @ Sep 9 2012, 05:58)  С другой стороны, не зря же свои менеджеры памяти "выдумывают", значит проблема есть... К языку программирования это не имеет никакого отношения. Язык C++ позволяет использовать любой менеджер памяти (включая использование нескольких менеджеров одновременно - для разных объектов разных). Свой менеджер памяти может потребоваться писать по тысяче разных причин - это зависит от решаемой задачи. И необходимость писать свой менеджер не означает, что все прочие существующие менеджеры плохи. Это всего лишь означает, что они не подходят для данной конкретной задачи. При этом для другой задачи какой-то из них может подойти гораздо лучше, чем "выдуманный" Вами. Но это совсем другая тема - не о языках программирования...
--------------------
Всего наилучшего, Alex Mogilnikov
|
|
|
|
|
Sep 11 2012, 05:56
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
QUOTE (alx2 @ Sep 10 2012, 13:11)  Но Вы-то, в отличие от нас, узнать это можете - достаточно заглянуть в map-файл... Вы, надеюсь, использовали nothrow-версию оператора new? Я не знаю Использовал так CODE int* p = new int[ 1000 ]; QUOTE (alx2 @ Sep 10 2012, 13:11)  А вот с такими реализациями: CODE void * operator new(size_t n) throw() { return malloc(n); } void operator delete(void *p) { free(p); } тоже тянет 260 кбайт? Попробую... QUOTE (alx2 @ Sep 10 2012, 13:11)  Но Вы-то, в отличие от нас, узнать это можете - достаточно заглянуть в map-файл... Вы, надеюсь, использовали nothrow-версию оператора new? Честно говоря, никогда не пользовался map-файлом... видимо пришло время) Спасибо!
--------------------
Выбор.
|
|
|
|
|
Sep 12 2012, 14:17
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(haker_fox @ Sep 12 2012, 19:54)  В общем new (std::nothrow) объем кода не уменьшает...((( Вообще-то должен. Посмотрите вот эту тему, потом дополнительно убедитесь, что: - вы не забыли ключики -fno-exceptions и -fno-rtti для компилятора;
- все варианты new() переопределены с nothrow;
- к проекту подключен вот этот файл;
- вы не забыли написать свой вариант _sbrk() (штатный вариант от codesourcery может тянуть за собой исключения. kgp в этом смысле лучше);
Я уверен, что после выполнения всех этих условий ваши волосы станут мягкими и шелковистыми
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Sep 13 2012, 01:18
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
QUOTE (AHTOXA @ Sep 12 2012, 22:17)  Вообще-то должен. Посмотрите вот эту тему, потом дополнительно убедитесь, что: - вы не забыли ключики -fno-exceptions и -fno-rtti для компилятора;
- все варианты new() переопределены с nothrow;
- к проекту подключен вот этот файл;
- вы не забыли написать свой вариант _sbrk() (штатный вариант от codesourcery может тянуть за собой исключения. kgp в этом смысле лучше);
Я уверен, что после выполнения всех этих условий ваши волосы станут мягкими и шелковистыми  Все, что Вы перечислили у меня есть (от части из scmRTOS). Но шампунь не помогает) Волосы мягкими и шелковистыми не стали) В мап-файле видно, что тянутся исключения CODE /arm-none-eabi/lib\libstdc++.a(eh_exception.o) Во вложениее полный map-файл...
--------------------
Выбор.
|
|
|
|
|
Sep 13 2012, 02:33
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
А если взять kgp? Или попробуйте скомпилировать приложенный пример. У меня он компилируется в следующие объёмы: codesourcery : 32K kgp : 18K.
stm32_minimal_with_printf_and_new.zip ( 119.2 килобайт )
Кол-во скачиваний: 123
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Sep 13 2012, 04:20
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
QUOTE (AHTOXA @ Sep 13 2012, 10:33)  А если взять kgp? Или попробуйте скомпилировать приложенный пример. У меня он компилируется в следующие объёмы: codesourcery : 32K kgp : 18K.
stm32_minimal_with_printf_and_new.zip ( 119.2 килобайт )
Кол-во скачиваний: 123Ваш компилируется) Мой не компилируется сборкой от Клена( Просто выдает это CODE --- compiling .\src/isrHandlers.cpp... make: *** [obj/isrHandlers.o] Error 1 Кстати, а за счет чего kgp так рулит по объему (почти в два раза)?
--------------------
Выбор.
|
|
|
|
Сообщений в этой теме
Сега Embedded C++ Oct 28 2010, 12:12 Forger Я использую исключительно свои библиотеки. Писать ... Oct 28 2010, 12:54 ar__systems Цитата(Forger @ Oct 28 2010, 07:54) В при... Oct 28 2010, 14:27 scifi Не знаю, насколько актуально, но вдруг пригодится:... Oct 28 2010, 14:31 Petr_I Цитата(Сега @ Oct 28 2010, 16:12) ... вых... Oct 28 2010, 15:17 Сега К моему удивлению, в Keil есть поддержка исключени... Oct 28 2010, 18:02 ig_z QUOTE (Сега @ Oct 28 2010, 21:02) К моему... Oct 28 2010, 19:07 beaRTS А давайте помусолим uSTL (ссылка была раньше).
1.... Sep 4 2012, 09:28 Major Использую для ARM (всех) компилятор C++ и очень до... Sep 4 2012, 09:58 beaRTS Спасибо!
а на вопросы кто-нибудь прольет свет... Sep 5 2012, 02:14 Сергей Борщ QUOTE (beaRTS @ Sep 5 2012, 05:14) Просто... Sep 5 2012, 05:53  beaRTS Цитата(Сергей Борщ @ Sep 5 2012, 08:53) м... Sep 5 2012, 07:21 Major Использую и на 128КБайт и на 256МБайт (тут уже лин... Sep 5 2012, 12:32 beaRTS Цитата(Major @ Sep 5 2012, 15:32) Зачем п... Sep 5 2012, 14:53  Marto Цитата(alx2 @ Sep 7 2012, 10:16) А что им... Sep 8 2012, 18:15      _Артём_ Цитата(haker_fox @ Sep 12 2012, 16:54) В ... Sep 12 2012, 14:13          AHTOXA Цитата(haker_fox @ Sep 13 2012, 10:20) Ва... Sep 13 2012, 05:03           haker_fox QUOTE (AHTOXA @ Sep 13 2012, 13:03) И как... Sep 13 2012, 05:08           DmitryM Цитата(AHTOXA @ Sep 13 2012, 09:03) ЗЫ. У... Sep 13 2012, 05:20        alx2 Цитата(haker_fox @ Sep 13 2012, 06:18) Во... Sep 13 2012, 04:21         haker_fox QUOTE (alx2 @ Sep 13 2012, 12:21) Насколь... Sep 13 2012, 05:01          haker_fox QUOTE (haker_fox @ Sep 13 2012, 13:01) Пр... Sep 13 2012, 05:21 Major Указатели на структуры - это практически когда воз... Sep 6 2012, 01:37 beaRTS Цитата(Major @ Sep 6 2012, 05:37) Указате... Sep 6 2012, 02:19 haker_fox QUOTE (Major @ Sep 6 2012, 09:37) Во встр... Sep 6 2012, 03:25  ReAl Цитата(haker_fox @ Sep 6 2012, 06:25) В м... Sep 6 2012, 07:35 Major Ну про пути я говорить не буду Есть мнения что C+... Sep 6 2012, 03:09 beaRTS Цитата(Major @ Sep 6 2012, 07:09) Есть мн... Sep 6 2012, 04:23  dxp QUOTE (beaRTS @ Sep 6 2012, 11:23) чую - ... Sep 6 2012, 06:59   beaRTS Цитата(dxp @ Sep 6 2012, 10:59) Да не, ни... Sep 6 2012, 07:16   sasamy Цитата(dxp @ Sep 6 2012, 10:59) Да не, ни... Sep 7 2012, 17:41    dxp QUOTE (sasamy @ Sep 8 2012, 00:41) Для чи... Sep 8 2012, 02:49     sasamy Цитата(dxp @ Sep 8 2012, 06:49) Сегодня С... Sep 9 2012, 22:30 Major ЦитатаВот так и получается, что "поняв",... Sep 6 2012, 05:10 halfdoom Совсем не давно, после длительного обсуждения с за... Sep 8 2012, 03:50 dxp А что это вот такое:
CODEC++-code requires signifi... Sep 8 2012, 05:54  _Pasha Цитата(dxp @ Sep 8 2012, 08:54) А что это... Sep 8 2012, 09:14   dxp QUOTE (_Pasha @ Sep 8 2012, 16:14) Они по... Sep 8 2012, 09:31  halfdoom Цитата(dxp @ Sep 8 2012, 08:54) Какой смы... Sep 8 2012, 09:45   dxp QUOTE (halfdoom @ Sep 8 2012, 16:45) Эти ... Sep 8 2012, 10:02 Major Еще раз вмешаюсь.
C++ это язык, возможности которо... Sep 8 2012, 06:10 mikeT Заинтересовало упоминание языка Ада в задачах, где... Sep 8 2012, 10:33 halfdoom Цитата(mikeT @ Sep 8 2012, 13:33) SafetyC... Sep 8 2012, 11:22 SSerge Цитата(mikeT @ Sep 8 2012, 17:33) и ниже ... Sep 8 2012, 13:28 andrewlekar Ada, насколько я знаю, очень хороший язык.
Ну а er... Sep 10 2012, 05:25 beaRTS наткнулся на статью интересную Паттерны проектиров... Oct 3 2012, 07:05 kolobok0 Цитата(beaRTS @ Oct 3 2012, 11:05) ...кто... Oct 5 2012, 09:56  beaRTS Цитата(kolobok0 @ Oct 5 2012, 13:56) И от... Oct 8 2012, 04:34   kolobok0 Цитата(beaRTS @ Oct 8 2012, 08:34) ...пат... Oct 8 2012, 09:37    beaRTS Цитата(kolobok0 @ Oct 8 2012, 13:37) я о ... Oct 8 2012, 09:54 globalist C++ замечательный язык. Только надо уметь им польз... Oct 9 2012, 21:26
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|