Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 5 mar 2025, o 21:22


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 25 mar 2016, o 13:49 
Offline
Nowy

Dołączył(a): 28 lut 2015
Posty: 12
Pomógł: 0

Zauważyłem dość często pojawiający się schemat w moim kodzie i chciałbym to jakoś zoptymalizować. Otóż wyobraźmy sobie jedną, długą i skomplikowaną funkcję od czarnej roboty, która przyjmuje równie skomplikowany parametr. Aby ułatwić życie istnieje zestaw funkcji-nakładek, które przyjmują parametry w bardziej przyjaznej formie, przekształcają ją do skomplikowanej formy i odpalają funkcję od czarnej roboty. Przykładowy pseudokod mógłby wyglądać jak poniżej.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Problem polega na bezsensownym wywoływaniu łańcuszka funkcji np. mod_reset wywołuje mod_execute. Tymczasem wszystkie funkcje-nakładki mogłyby być inline i np. w miejsce mod_reset kompilator mógłby sam od razu wstawić mod_execute z odpowiednimi parametrami, co mogłoby wyglądać jak poniżej.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Gdyby wszystko było w jednym pliku (lub funkcje-nakładki znajdowałyby się w mod.h inkludowanym w main.c), to wystarczyłoby dodać static inline do każdej z nich i po problemie. Ale jakoś nie mogę się przekonać do definiowania takich funkcji w hederach. Innym rozwiązaniem byłoby zdefiniować te funkcje jako makra. Ale IMHO to jeszcze gorszy pomysł. Dlatego zastanawiam się czy można to zrobić jeszcze jakoś inaczej - lepiej.



Ostatnio edytowano 4 kwi 2016, o 08:02 przez damwoj600, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2016, o 14:01 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 sie 2013
Posty: 230
Lokalizacja: Zabrze
Pomógł: 17

Zapytam tak z głupia: a sprawdziłeś co robi kompilator? Szczególnie dla różnych opcji optymalizacji?
Być może cię zaskoczy, ale wiele rzeczy (jak np. te, o których piszesz) twórcy kompilatorów już dawno uwzględniają. Zatem może nie warto wyważać otwartych drzwi? :mrgreen:
Poza tym to, że coś jest inline niekoniecznie będzie tak potraktowane przez kompilator.
Według mnie powinieneś przestać się martwić optymalizacją kodu (bo to robi kompilator), ale raczej skoncentrować się by był on jasny w analizie i prosty do modyfikowania (nawet po wielu latach).

_________________
40-32:2=4!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 mar 2016, o 14:58 
Offline
Moderator zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 18 lip 2012
Posty: 3218
Lokalizacja: Kraków - obok FAB5 ATMEL'a
Pomógł: 91

Kod źle wstawiony.

_________________
http://www.jaglarz.info



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2016, o 08:11 
Offline
Nowy

Dołączył(a): 28 lut 2015
Posty: 12
Pomógł: 0

PJS napisał(a):
Zapytam tak z głupia: a sprawdziłeś co robi kompilator? Szczególnie dla różnych opcji optymalizacji?
Być może cię zaskoczy, ale wiele rzeczy (jak np. te, o których piszesz) twórcy kompilatorów już dawno uwzględniają. Zatem może nie warto wyważać otwartych drzwi? :mrgreen:

Wiem, że kompilator to cwana bestia i faktycznie wiele rzeczy elegancko optymalizuje. Nie inaczej jest w moim przypadku. Jednak działa dość selektywnie i nie wszystkie funkcje optymalizuje w ten sposób. Pewnie ma to jakieś uwarunkowania, ale ja jestem dociekliwy i zastanawiałem się czy jakoś mogę zmusić kompilator i jawnie zasugerować mu, żeby potraktował te funkcje jako inline.

Cytuj:
Poza tym to, że coś jest inline niekoniecznie będzie tak potraktowane przez kompilator.
Według mnie powinieneś przestać się martwić optymalizacją kodu (bo to robi kompilator), ale raczej skoncentrować się by był on jasny w analizie i prosty do modyfikowania (nawet po wielu latach).

No niby tak, ale ja lubię wiedzieć, że zrobiłem coś dobrze i lepiej tego zrobić nie mogłem :P

Jaglarz napisał(a):
od źle wstawiony.

Poprawione. Nie traktowałem tego jako listing kodu, bo to taki krótki pseudokod, ale ok - zmieniłem :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 4 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO