реклама на сайте
подробности

 
 
> Почему функция sscanf требует около 50кБ памяти?, Eclipse SDK. gcc
aabmail
сообщение Mar 20 2014, 08:26
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 210
Регистрация: 4-06-08
Из: Москва
Пользователь №: 38 056



Здравствуйте, уважаемые форумчане!

Возникла проблема с linking gcc в среде Xilinx SDK (Eclipse).

Почему из-за функции sscanf сегмент .text увеличивается в размере на 50 кБайт (а может и больше)? Не потому ли, что вместе с sscanf в .text попадает целиком вся библиотека ввода/вывода.
Как сделать так, чтобы прилинковывалась не вся библиотека, а только те функции, которые вывываются из программы.

Или я что-то в корне не понимаю. Заранее благодарен за любые комментарии.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aabmail
сообщение Mar 21 2014, 07:25
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 210
Регистрация: 4-06-08
Из: Москва
Пользователь №: 38 056



Цитата(Сергей Борщ @ Mar 20 2014, 13:33) *
Создайте .map (ключ для gcc -Wl.-Map=имя_файла). Рассмотрите его внимательно. В для каждой притянутой из библиотеки функции написано, какая функция ее вызвала. Не знаю про Xilinx, но обычно gcc-реализация (s)scanf тянет за собой менеджер памяти и кучу прочих вещей. Как раз где-то на 50К.


Я сгенерировал map-файл, но сильно закапываться в него не стал. Как я понял, в .text попадает целиком не вся библиотека ввода/вывода, а только нужные функции. Верно?

Цитата(scifi @ Mar 21 2014, 06:18) *
Кстати, как-то раз взял из тырнета чей-то sprintf() - получилось около 4К байт кода и никаких malloc(). С тех пор повсеместно использую. Есть ли что-то подобное для sscanf? Поиск в гугле навскидку результата не дал.


Для microBlaze специально сделан так называемый xil_printf, который не поддерживает плавающую точку. Он отъедает около 3-х килобайт.
Однако для sscanf такой халявы нет.

Мне в общем-то не нужен парсинг строк с вещественными числами с фиксированной точкой, а также с тестовыми подстроками.
Нет ли у кого? Не хотелось бы самому это писать.

Цитата(megajohn @ Mar 21 2014, 06:24) *
да я вообще полагал, что sprintf sscanf должны работать только на стеке. И вроде так и есть в IAR. Или нет ?


В GNU GCC не на стеке.

Цитата(Сергей Борщ @ Mar 21 2014, 06:55) *
В ИАРе может и так. А в комплекте gcc в качестве стандартной библиотеки идет newlib, которая изначально заточена под большие компы, многопоточность и буферизованный вывод. Только недавно в нех появилась возможность собирать "нано"-версию. Возможно это чем-то поможет автору ветки. Я код newlib внимательно не изучал, видел лишь имена функций, которые подтягивает sscanf и ssprintf. Вроде как printf использует динамическую память при первом вызове для создания структур потокового ввода-вывода и их буферов.


В Xilinx SDK newlib, к сожалению, не поставляется.

Всем большое спасибо за ответы.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- aabmail   Почему функция sscanf требует около 50кБ памяти?   Mar 20 2014, 08:26
- - Сергей Борщ   Цитата(aabmail @ Mar 20 2014, 10:26) Или ...   Mar 20 2014, 10:33
|- - Krys   Цитата(Сергей Борщ @ Mar 20 2014, 16:33) ...   Dec 18 2014, 09:29
- - DASM   Да она и сама по себе в полном виде на почти столь...   Mar 21 2014, 00:49
- - scifi   Кстати, как-то раз взял из тырнета чей-то sprintf(...   Mar 21 2014, 03:18
|- - megajohn   Цитата(scifi @ Mar 21 2014, 07:18) Кстати...   Mar 21 2014, 03:24
|- - Сергей Борщ   Цитата(megajohn @ Mar 21 2014, 05:24) И в...   Mar 21 2014, 03:55
|- - Сергей Борщ   Цитата(aabmail @ Mar 21 2014, 09:25) Я сг...   Mar 21 2014, 08:07
|- - aabmail   Цитата(Сергей Борщ @ Mar 21 2014, 11:07) ...   Mar 21 2014, 09:56
||- - scifi   Цитата(aabmail @ Mar 21 2014, 13:56) С эт...   Mar 21 2014, 10:42
|- - doom13   Цитата(Сергей Борщ @ Mar 21 2014, 11:07) ...   Jun 17 2015, 18:37
- - aabmail   Цитата(scifi @ Mar 21 2014, 13:42) А вы н...   Mar 21 2014, 12:34
- - scifi   Я и раньше натыкался на Nuttx. Там в комплекте идё...   Mar 21 2014, 15:28
- - Сергей Борщ   Я не использую этот плугин, поэтому конкретное мес...   Dec 18 2014, 10:30
- - Krys   Там галочки можно поставить только в General: В...   Dec 18 2014, 10:57


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 04:15
Рейтинг@Mail.ru


Страница сгенерированна за 0.01373 секунд с 7
ELECTRONIX ©2004-2016