Код
#include "sys/alt_stdio.h"
int main() {
alt_putstr("Hello from Nios II!\n");
while (1); return 0;
}
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.
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;
}
#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.
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 всякого нацепляют Альтерцы... Где это безобразие отрубить или интеллект включить у линковщика ?