Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

C и C++
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=1739
Страница 1 от 1

Автор:  Nikola Kirov [ Пет Фев 03, 2006 10:47 pm ]
Заглавие:  C и C++

Ами случи се нещо интересно.
Пиша си една програмка като се каня да е на C++. Направих си функциите за работа с хардуера и това онова и стигнах до дефинирането на един клас. И като ми даде грешка разбрах че съм пропуснал да щтракна опцията на IAR-a на C++.
Дотук нищо интересно но се оказа че като го компилирах на C++ противно на очакванията ми генерирания код намаля с някакви дребни баитове вместо да се увеличи. Реших че нещо с оптимизацията ще да е проблема и ги компилирах при максимална оптимизация и пак се оказа че C++ варианата е с 10баита отдолу.
Абе преди съм правил такива неща и кода се увеличаваше с около 10тина процента. А и аз като четах преди за организацията на ниско ниво останах с впечатление че от начина на викане на функции и други подробности е нормално на C++ кода да е малко по раздут.
А сега гледам и не вярвам,мързи ме да кача някоя по стара версия на IAR да видя какво ще направи тя с този проект,и се чудя IAR ли са направили някаква изгъзица или има и случаи когато на C++ се получава също толкова ефективен код както и на C.
Някой познава ли тая материя в детаили че да осветли малко въпроса?

Автор:  [ Съб Фев 04, 2006 12:12 am ]
Заглавие: 

Случват се такива неща. При мен когато се случи за пръв път се оказа, че новата версия на C++ компилатор изгенерира по-малък код от стара версия на C компилатор. Бая се чудих докато разбера че е оттам разликата. При теб може в един и същ продукт да имаш различни версии на C и C++ компилатора, в смисъл единия проектиран 2000г., другия 2005г. , единия писан според тогавашните възгледи, другия пък писан от същия екип, ама след 5г. опит. Или пък писани от различни екипи.

От друга страна много съм се зверил, защо Borland C++ генерира фрапиращо по-голям код от MicroSoft C++. Един и същ C/C++ сорс като минеше през Borland C++ ставаше понякой път 2 до 3 пъти по-голям. Накрая намерих причината, че IDE -то на Borland линква към изпълнимия файл никому ненужи библиотеки, направих си компилация от команден ред и разликите станаха до към 10-15%, но все пак MicroSoft кода беше по-кратък.

Автор:  Nikola Kirov [ Съб Фев 04, 2006 12:18 am ]
Заглавие: 

Освен наистина C компилатора да е по слаб в оптимизацията от C++ компилатора им. Аз си мислех че е един и същ компилатор но с превключващи се опции но може и така да е. Аз самия нямам претенции че познавам добре на ниско ниво организацията на работа при C i C++ и за това попитах тук дали някои не се е задълбочавал и да има някои ситуации при които C++ да се явява толкова ефективен колкото и C

Автор:  Реконструктор [ Съб Фев 04, 2006 1:50 am ]
Заглавие:  Re: C и C++

Nikola Kirov написа:
останах с впечатление че от начина на викане на функции и други подробности е нормално на C++ кода да е малко по раздут


По принцип зависи от кода, но точно начина на викане прави кода по-малък. ;)

Автор:  Nikola Kirov [ Съб Фев 04, 2006 2:07 am ]
Заглавие: 

Явно нещо са ми се омотали спомените,като ми остане време пак ще взема да си ги препрочета нещата.

Автор:  [ Съб Фев 04, 2006 2:07 am ]
Заглавие:  Re: C и C++

Реконструктор написа:
По принцип зависи от кода, но точно начина на викане прави кода по-малък. ;)

Знеш ли разликите в детайли, че ми стана интересно ? Ся като се напъвам по това време на денонощието не се сещам за някакви фрапиращи разлики. Ама пък от доста време не следя C/C++ компилаторите.

Автор:  Реконструктор [ Съб Фев 04, 2006 3:01 am ]
Заглавие: 

Не е нещо особено - просто при ООП на ф-иите се предават значително по-малко параметри.

Автор:  zaphod [ Съб Фев 04, 2006 11:08 am ]
Заглавие: 

да бе, по-малко. това което си декларирал, това се предава, само дето се предава още един невидим параметър - this указателя. по принцип ООП има по-добре преизползваемост на кода, така че за една и съща задача е нормално програмата да стане по-малка, но това не важи за случаите когато компилираш един и същ код. с една дума нямам идея за случая.

Автор:  bateAz [ Съб Фев 04, 2006 12:38 pm ]
Заглавие: 

Според мен единственото разумно обяснение е това не Пи(Рев). Вероятно C++ компилаторът е дисто по-нова и оптимизиране версия от ANSY C, който първоначално е бил единствената опция. Иначе просто няма логика : Zaphod си го е казал - това е this параметърът, който е в повече.
Един малко китайски начин да се разнищи мистерията е да се погледна асемблеския код, генериран от компилаторът в двата случая. Ама е много голяма китайщина. Нямам толкова спортна злоба за такива разследвания 8)

Автор:  Реконструктор [ Съб Фев 04, 2006 5:15 pm ]
Заглавие: 

zaphod написа:
да бе, по-малко. това което си декларирал, това се предава, само дето се предава още един невидим параметър - this указателя. по принцип ООП има по-добре преизползваемост на кода, така че за една и съща задача е нормално програмата да стане по-малка, но това не важи за случаите когато компилираш един и същ код. с една дума нямам идея за случая.


Именно заради него. Обектът е структура и си пази всички необходими данни, и ф-иите се викат само с 1 параметър. Докато при класическото програмиране обикновено се предават повече параметри.

Автор:  zaphod [ Нед Фев 05, 2006 5:19 pm ]
Заглавие: 

говорим за един и същи текстов сорс, а не за една и съща задача.
много сорсове на С, могат да се компилират на С++. доколкото разбирам, и без да иска, никола киров е направил точно това.

Автор:  Nikola Kirov [ Нед Фев 05, 2006 8:41 pm ]
Заглавие: 

Да де точно това направих,в работата с прериферия и подобни не се ползват неща специфични за C++ и поради това си се компилираше и работеше с настроика C на компилатора. Явно доста са се потрудили върху оптимизацията на C++. Учудващо малък кода дава наистина. То вярно че точно C++ им е основното предимство на IAR и явно наблягат на него.

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/