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

 
 
 
Reply to this topicStart new topic
> С++ против С, Что за грабли ?
WitFed
сообщение Dec 13 2011, 06:34
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 271
Регистрация: 6-12-11
Из: Taganrog
Пользователь №: 68 701



С нуля создаю в 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 всякого нацепляют Альтерцы... Где это безобразие отрубить или интеллект включить у линковщика ?
Go to the top of the page
 
+Quote Post
DevL
сообщение Dec 14 2011, 22:08
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 254
Регистрация: 23-10-10
Из: астрал
Пользователь №: 60 371



для С++ это делается правильно и даже нужно, в общем случае...

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

где именно вставить правда не подскажу...
Go to the top of the page
 
+Quote Post
Postoroniy_V
сообщение Dec 15 2011, 03:59
Сообщение #3


МедвеД Инженер I
****

Группа: Свой
Сообщений: 816
Регистрация: 21-10-04
Пользователь №: 951



видимо нужно добавить в makefile
пробовали?


--------------------
Cogito ergo sum
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 15 2011, 07:32
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



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


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
WitFed
сообщение Dec 16 2011, 11:02
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 271
Регистрация: 6-12-11
Из: Taganrog
Пользователь №: 68 701



Да, спасибо, в Makefile подкорректировал строку:
Код
APP_CPPFLAGS := -fno-exceptions $(APP_INC_DIRS) \
                $(ALT_CPPFLAGS) \
                $(CPPFLAGS)

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


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



Цитата(WitFed @ Dec 16 2011, 18:02) *
А тут даже за бОльшие деньги, и то убого и тормозно wink.gif

вообще-то эклипс бесплатный, в т.ч. и альтеровская сборка
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th June 2025 - 03:39
Рейтинг@Mail.ru


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