| Автор |
Съобщение |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
 C и C++
Ами случи се нещо интересно.
Пиша си една програмка като се каня да е на C++. Направих си функциите за работа с хардуера и това онова и стигнах до дефинирането на един клас. И като ми даде грешка разбрах че съм пропуснал да щтракна опцията на IAR-a на C++.
Дотук нищо интересно но се оказа че като го компилирах на C++ противно на очакванията ми генерирания код намаля с някакви дребни баитове вместо да се увеличи. Реших че нещо с оптимизацията ще да е проблема и ги компилирах при максимална оптимизация и пак се оказа че C++ варианата е с 10баита отдолу.
Абе преди съм правил такива неща и кода се увеличаваше с около 10тина процента. А и аз като четах преди за организацията на ниско ниво останах с впечатление че от начина на викане на функции и други подробности е нормално на C++ кода да е малко по раздут.
А сега гледам и не вярвам,мързи ме да кача някоя по стара версия на IAR да видя какво ще направи тя с този проект,и се чудя IAR ли са направили някаква изгъзица или има и случаи когато на C++ се получава също толкова ефективен код както и на C.
Някой познава ли тая материя в детаили че да осветли малко въпроса?
|
| Пет Фев 03, 2006 10:47 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Случват се такива неща. При мен когато се случи за пръв път се оказа, че новата версия на C++ компилатор изгенерира по-малък код от стара версия на C компилатор. Бая се чудих докато разбера че е оттам разликата. При теб може в един и същ продукт да имаш различни версии на C и C++ компилатора, в смисъл единия проектиран 2000г., другия 2005г. , единия писан според тогавашните възгледи, другия пък писан от същия екип, ама след 5г. опит. Или пък писани от различни екипи.
От друга страна много съм се зверил, защо Borland C++ генерира фрапиращо по-голям код от MicroSoft C++. Един и същ C/C++ сорс като минеше през Borland C++ ставаше понякой път 2 до 3 пъти по-голям. Накрая намерих причината, че IDE -то на Borland линква към изпълнимия файл никому ненужи библиотеки, направих си компилация от команден ред и разликите станаха до към 10-15%, но все пак MicroSoft кода беше по-кратък.
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Съб Фев 04, 2006 12:12 am |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Освен наистина C компилатора да е по слаб в оптимизацията от C++ компилатора им. Аз си мислех че е един и същ компилатор но с превключващи се опции но може и така да е. Аз самия нямам претенции че познавам добре на ниско ниво организацията на работа при C i C++ и за това попитах тук дали някои не се е задълбочавал и да има някои ситуации при които C++ да се явява толкова ефективен колкото и C
|
| Съб Фев 04, 2006 12:18 am |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
 Re: C и C++
По принцип зависи от кода, но точно начина на викане прави кода по-малък. 
|
| Съб Фев 04, 2006 1:50 am |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Явно нещо са ми се омотали спомените,като ми остане време пак ще взема да си ги препрочета нещата.
|
| Съб Фев 04, 2006 2:07 am |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
 Re: C и C++
Знеш ли разликите в детайли, че ми стана интересно ? Ся като се напъвам по това време на денонощието не се сещам за някакви фрапиращи разлики. Ама пък от доста време не следя C/C++ компилаторите.
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Съб Фев 04, 2006 2:07 am |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Не е нещо особено - просто при ООП на ф-иите се предават значително по-малко параметри.
|
| Съб Фев 04, 2006 3:01 am |
|
 |
|
zaphod
Ранг: Форумен бог
Регистриран на: Нед Юли 24, 2005 10:28 am Мнения: 2658
|
да бе, по-малко. това което си декларирал, това се предава, само дето се предава още един невидим параметър - this указателя. по принцип ООП има по-добре преизползваемост на кода, така че за една и съща задача е нормално програмата да стане по-малка, но това не важи за случаите когато компилираш един и същ код. с една дума нямам идея за случая.
|
| Съб Фев 04, 2006 11:08 am |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
Според мен единственото разумно обяснение е това не Пи(Рев). Вероятно C++ компилаторът е дисто по-нова и оптимизиране версия от ANSY C, който първоначално е бил единствената опция. Иначе просто няма логика : Zaphod си го е казал - това е this параметърът, който е в повече.
Един малко китайски начин да се разнищи мистерията е да се погледна асемблеския код, генериран от компилаторът в двата случая. Ама е много голяма китайщина. Нямам толкова спортна злоба за такива разследвания 
|
| Съб Фев 04, 2006 12:38 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Именно заради него. Обектът е структура и си пази всички необходими данни, и ф-иите се викат само с 1 параметър. Докато при класическото програмиране обикновено се предават повече параметри.
|
| Съб Фев 04, 2006 5:15 pm |
|
 |
|
zaphod
Ранг: Форумен бог
Регистриран на: Нед Юли 24, 2005 10:28 am Мнения: 2658
|
говорим за един и същи текстов сорс, а не за една и съща задача.
много сорсове на С, могат да се компилират на С++. доколкото разбирам, и без да иска, никола киров е направил точно това.
|
| Нед Фев 05, 2006 5:19 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Да де точно това направих,в работата с прериферия и подобни не се ползват неща специфични за C++ и поради това си се компилираше и работеше с настроика C на компилатора. Явно доста са се потрудили върху оптимизацията на C++. Учудващо малък кода дава наистина. То вярно че точно C++ им е основното предимство на IAR и явно наблягат на него.
|
| Нед Фев 05, 2006 8:41 pm |
|
|