JeDay 0 8 августа, 2013 Опубликовано 8 августа, 2013 (изменено) · Жалоба Всем привет. Решил сделать проект на С++, заюзал виртуальные функции. Все было хорошо, пока не стал вопрос оптимизации ОЗУ. Сгенерил .map файл в котором мне непонятна строка где линковщик отъедает 1.5к оперативы. Ниже вырезка с файла: *********************************************************************** ******** *** MODULE SUMMARY *** Module ro code ro data rw data ------ ------- ------- ------- D:\prj\git\fuel_sensor_fw\app\prj\flash\Obj: [1] ev_bus.o 112 fs_filter.o 104 hal.o 676 hal_adc.o 46 4 hal_dac.o 76 hal_flash.o 236 3 hal_gpio.o 130 40 40 hal_i2c.o 286 hal_sys.o 494 4 hal_tmr.o 538 4 hal_uart.o 364 8 iface.o 276 20 lis331.o 64 main.o 1 048 24 3 056 measure.o 470 misc.o 204 output.o 88 proto_master.o 10 proto_slave.o 1 828 queue_08.o 214 settings.o 2 700 soft_timer.o 324 20 5 startup_stm32f0xx.o 258 stm32f0xx_dac.o 92 stm32f0xx_flash.o 324 stm32f0xx_gpio.o 158 stm32f0xx_i2c.o 250 stm32f0xx_misc.o 92 stm32f0xx_rcc.o 400 16 16 stm32f0xx_syscfg.o 20 stm32f0xx_tim.o 476 stm32f0xx_usart.o 280 wake.o 698 ---------------------------------------------- Total: 13 336 120 3 140 command line: [2] ---------------------------------------------- Total: dl6M_tln.a: [3] cppinit.o 168 20 exit.o 8 strcat.o 28 ---------------------------------------------- Total: 204 20 dlpp6M_tl_ne.a: [4] cxxabi.o 48 ---------------------------------------------- Total: 48 m6M_tl.a: [5] FltAddSub.o 278 FltDiv.o 170 FltMul.o 180 FltToS32.o 58 FltToU32.o 38 I32ToFlt.o 30 ---------------------------------------------- Total: 754 rt6M_tl.a: [6] ABImemcpy.o 92 ABImemset.o 84 I32DivMod.o 86 cexit.o 14 cmain.o 22 cmain_call_ctors.o 32 copy_init3.o 48 cstart_call_dtors.o cstartup_M.o 12 data_init.o 40 strcpy.o 16 strlen.o 16 uread4.o 22 uwrite4.o 20 zero_init3.o 42 ---------------------------------------------- Total: 546 shb_l.a: [7] exit.o 20 ---------------------------------------------- Total: 20 Linker created 40 1 420 -------------------------------------------------- Grand Total: 14 908 160 4 580 Получается что 3140 байт я использовал, а 1420 байт кудато задействовал линковщик. Собственно подозреваю что эта память ушла на теневые вещи связанные с С++: виртуальные таблицы и тд. Но таблица на одну виртуальную ф-ю занимает всего порядка 20 байт. Есть мысли? Изменено 8 августа, 2013 пользователем IgorKossak [codebox] для длинного кода, [code] - для короткого!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
JeDay 0 8 августа, 2013 Опубликовано 8 августа, 2013 · Жалоба В общем в Си проекте линковщик тоже отъедает ОЗУ, раньше не замечал т.к. ее было предостаточно :) Кто нибуть знает как уменьшить прожорливость линковщика? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость MALLOY2 9 августа, 2013 Опубликовано 9 августа, 2013 · Жалоба Linker created - Это в основном место под кучу и стеки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
JeDay 0 9 августа, 2013 Опубликовано 9 августа, 2013 · Жалоба Спасибо, разобрался. Я в стандартном ICF файле забыл стеки и кучу уменьшить. Вот оно и было: define symbol __ICFEDIT_size_cstack__ = 0x400; define symbol __ICFEDIT_size_heap__ = 0x200; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться