Wpis z mikrobloga

Mam projekt w #cplusplus, którym, póki co, tylko main jest .cpp, reszta plików jest w C. Każdy plik .h i .c opatrzony jest dyrektywą warunkową #ifdef __cplusplus extern "c"{ itp odpowiednio tuz przed końcem pliku.
Dwa identyczne pod względem plików kody, C++ przeleciany debugerem, wszystko sie wykonuje.
Niestety projekt c zajmuje około 22kB kodu i nieco ponad 40kB ramu, za to kod spod arm_none_eabi_g++ daje na wyjściu około 12kB kodu i rezerwuje tylko 28 kB ramu i ofc nie działa. Ale dioda miga, przerwania działają.
Pytanie jest o przyczynę różnic w wielkości kodu optymalizacje wyłączone, opcje kompilacji identyczne). Czy sa jakieś myki gdzieś na etapie składania kodu do cpp ze jest go mniej niz spod gcc c. Czy sa jakieś makra, które mogą zostać rozwinięte w inny sposób?
#jezykc #mojeidejestpowazne
  • 5
  • Odpowiedz
@Analityk: rowniez sklanialbym sie co do tego, ze opcje kompilatora sa zle. Roznica moze wskazywac np na to, ze moze brakowac chocby kodu startowego (skoro nie ma problemu przy linkowaniu, wiec zakladam, ze biblioteki sa)...
  • Odpowiedz
@Kaczus2B: sprawdzam kod w pliku .lss, widać tablice wektorów przerwań. Kod startowy dodawany jest w opcjach linkera -enrtypoint=ResetHandler, sa jeszcze inne flagi. Opcje kompilacji cpp sa identyczne z c z wyjątkiem -stdgnu i kilku ostrzeżeń.
Skrypt linkera jest taki sam, jedynie make może sie różnić ale to muszę sie upewnić.

@dupasmoka: sa nastawione na -O0 ale mogę dodać ta opcje do pozostałych flag. Oryginalny kod działa z -Os
  • Odpowiedz