Отговори на тема  [ 12 мнения ] 
C и C++ 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 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
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 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++
Nikola Kirov написа:
останах с впечатление че от начина на викане на функции и други подробности е нормално на C++ кода да е малко по раздут


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


Съб Фев 04, 2006 1:50 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 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
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
Не е нещо особено - просто при ООП на ф-иите се предават значително по-малко параметри.


Съб Фев 04, 2006 3:01 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Юли 24, 2005 10:28 am
Мнения: 2658
Мнение 
да бе, по-малко. това което си декларирал, това се предава, само дето се предава още един невидим параметър - this указателя. по принцип ООП има по-добре преизползваемост на кода, така че за една и съща задача е нормално програмата да стане по-малка, но това не важи за случаите когато компилираш един и същ код. с една дума нямам идея за случая.


Съб Фев 04, 2006 11:08 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

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


Съб Фев 04, 2006 12:38 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
zaphod написа:
да бе, по-малко. това което си декларирал, това се предава, само дето се предава още един невидим параметър - this указателя. по принцип ООП има по-добре преизползваемост на кода, така че за една и съща задача е нормално програмата да стане по-малка, но това не важи за случаите когато компилираш един и същ код. с една дума нямам идея за случая.


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


Съб Фев 04, 2006 5:15 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Юли 24, 2005 10:28 am
Мнения: 2658
Мнение 
говорим за един и същи текстов сорс, а не за една и съща задача.
много сорсове на С, могат да се компилират на С++. доколкото разбирам, и без да иска, никола киров е направил точно това.


Нед Фев 05, 2006 5:19 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 31, 2004 9:19 pm
Мнения: 4464
Местоположение: Stara Zagora
Мнение 
Да де точно това направих,в работата с прериферия и подобни не се ползват неща специфични за C++ и поради това си се компилираше и работеше с настроика C на компилатора. Явно доста са се потрудили върху оптимизацията на C++. Учудващо малък кода дава наистина. То вярно че точно C++ им е основното предимство на IAR и явно наблягат на него.


Нед Фев 05, 2006 8:41 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 12 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 4 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни