Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: С++ против С
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
WitFed
С нуля создаю в Nios II Eclipse свою любимую пару проект/BSP на шаблоне "Hello world small", прога hello_world_small.c минимальная:
Код
#include "sys/alt_stdio.h"
int main() {
  alt_putstr("Hello from Nios II!\n");
  while (1); return 0;
}

Компилирую, получается такое распределение памяти:
Код
Info: (hws.elf) 1248 Bytes program size (code + initialized data).
Info:           30 KBytes free for stack + heap.

У меня 32К ончипа для всего вообще используется.
Потом переименовываю этот исходник в hello_world_small.cpp, достругиваю 'extern "C" ', чтоб линковалось, получается:
Код
extern "C" {
#include "sys/alt_stdio.h"
}
int main() {
  alt_putstr("Hello from Nios II!\n");
  while (1); return 0;
}

Но размеры кода дико возрастают:
Код
Info: (hws.elf) 31 KBytes program size (code + initialized data).
Info:           2808 Bytes free for stack + heap.

Хрен с ним, что 31К + 2.7К будет уже больше 32К, но откуда набрались лишние 29 ? Прога же детская, ничего абсолютно не поменялось по смыслу !
Гляжу в мап-файл, там какие-то "std::exception::what() const", "__cxxabiv1::__si_class_type_info::~__si_class_type_info()", "_Unwind_GetDataRelBase" и пр. шушера плюсОвая появилась, хотя я её не заказывал, нигде исключения не включал:
Нажмите для просмотра прикрепленного файла
Такое безобразие в 10 и 11 версиях началось, в 9 и ранее разницы между размерами С- и ++-кода не было.
Знающие люди посоветовали мне юниксовый ключик -fno-exceptions, только он в опциях компиляции, где типа можно добавить что-то в командную строку:
Properties for hws / C/C++ Build / Discovery Options / Cygwin C++ Compiler / Compiler invocation arguments
, не срабатывает. Мне вообще эти исключения, как собаке пятая нога, от них только кода в каждой функции в 3 раза больше становится, а толку минимум, одно замутнение потока управления, да и еще runtime всякого нацепляют Альтерцы... Где это безобразие отрубить или интеллект включить у линковщика ?
DevL
для С++ это делается правильно и даже нужно, в общем случае...

по map файлу действительно можно найти все лишнее и -fno-exceptions - очень правильное решение что бы попробывать выключить,

где именно вставить правда не подскажу...
Postoroniy_V
видимо нужно добавить в makefile
пробовали?
Сергей Борщ
QUOTE (WitFed @ Dec 13 2011, 08:34) *
только он в опциях компиляции, где типа можно добавить что-то в командную строку:
Properties for hws / C/C++ Build / Discovery Options / Cygwin C++ Compiler / Compiler invocation arguments
, не срабатывает.
Естественно. Это же Discovery Options, они используются оболочкой для поиска заголовочных файлов, автодополнения, всплывающих подсказок и подобного. Ключи компиляции указываются в другом месте, в общем случае - в makefile, в частных - возможно в меню какого-то плагина.
WitFed
Да, спасибо, в Makefile подкорректировал строку:
Код
APP_CPPFLAGS := -fno-exceptions $(APP_INC_DIRS) \
                $(ALT_CPPFLAGS) \
                $(CPPFLAGS)

, и стало лучше, хотя несколько байт по ср. с С прибавились.
Юниксовая мышиная возня в мириадах файлов слабо-юзер-ориентированного интерфейса достаёт.
Хрен с ними, с пропавшими конструкторами статических объектов -- переделал на методы create(), но никто тут из народе не имеет случаем статуса альфа-бета-тестера у Альтеры, чтоб они по совету снизу чекбоксов подобавляли в 12 версии для разных сторон С++ на видное место -- типа мухи отдельно, котлеты отдельно ?.. wink.gif Там уже настроек туева хуча отродясь Эклипсовых тянется, мало кому требующихся.
К makefil-ям у меня давние претензии -- неужто такой низкоуровневый интерфейс, тянущийся с замшелых 60-х годов, нельзя заменить на что-то более интеллектуальное для сборки проектов ? Почему Эклипс не знает, где у него исходники расположены и системные заголовочники ? Программисты его писали или кто ? Вызывал бы сам компилятор с нужными ключами... Микрософты уважают нас, как-то научились это делать в Студии своей очень давно, там даже можно компилить отдельные файлы по Ctrl-F7. А тут даже за бОльшие деньги, и то убого и тормозно wink.gif
vadimuzzz
Цитата(WitFed @ Dec 16 2011, 18:02) *
А тут даже за бОльшие деньги, и то убого и тормозно wink.gif

вообще-то эклипс бесплатный, в т.ч. и альтеровская сборка
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.