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



Teraz jest 29 mar 2024, o 10:37


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 4 lip 2019, o 12:54 
Offline
Użytkownik

Dołączył(a): 13 mar 2013
Posty: 123
Pomógł: 1

Witam
Ostatnio potrzebowałem zmiennej lokalnej, która jednocześnie byłaby zarówno szybka jak też i zachowywała wartość przy ponownym wywołaniu funkcji. Mam więc pytanie - czy jeśli określę zmienną jako register, to czy po ponownym wywołaniu funkcji zachowa ona swoja ostatnią wartość, czy też trzeba ograniczyć się do static rezygnując z szybkości na rzecz nieulotności ?
Pzdr.
W



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lip 2019, o 13:49 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27212
Lokalizacja: Szczecin
Pomógł: 1041

chyba kolega czegoś nie zrozumiał jeśli chodzi o register i static.

Po pierwsze - jak można myśleć, że jakaś inna dyrektywa niż static - zadziała tak jak static ? No to troszkę byłoby bez sensu, więc zapomnij o takich rzeczach. Jak chcesz mieć zmienną statyczną to TYLKO I WYŁĄCZNIE specyfikator static.

Specyfikator "register" nie wymusza żadnej super szybkości ani nie jest NAKAZEM dla kompilatora w przeciwieństwie do "static" który jest NAKAZEM dla kompilatora. REGISTER to tylko i wyłącznie PROPOZYCJA dla kompilatora aby umieścił tę zmienną w jakimś wolnym rejestrze zamiast pamięci RAM - jeśli akurat jest wolny rejestr pod ręką. A jeśli nie ma to dyrektywa nic ci nie pomoże ... kompilator zrobi co chce, trzeba mieć tego świadomość .... Kompilator co najwyżej jeśli sam miałby powiedzmy ze dwie zmienne i zastanawiałby się którą wrzucić do rejestru - to gdyby zobaczył przy twojej specyfikator "register" to przestałby się zastanawiać i wrzucił twoją zmienną spośród tych dwóch ;) to tak obrazowo mówiąc oczywiście.

Oczywiście nie da się połączyć tych dwóch specyfikatorów - ale chyba teraz po tym opisie rozumiesz sam - że brzydko mówiąc "daj sobie na luz" z tym specyfikatorem register i wszystko będzie działać jak się należy. Co więcej - wcale to nie oznacza, że kompilator nigdy tej zmiennej nie wrzuci do rejestru jeśli będzie wolny pod ręką. Poza tym to zawsze można sprawdzić szybko w pliku asemblerowym po kompilacji *.lss

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lip 2019, o 14:53 
Offline
Użytkownik

Dołączył(a): 13 mar 2013
Posty: 123
Pomógł: 1

Dzięki. Wszystko jasne. Myślę ,ze chciałem "przedobrzyć"
Pzdr.
W



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 lip 2019, o 15:32 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27212
Lokalizacja: Szczecin
Pomógł: 1041

zubik napisał(a):
... Myślę tu o nie używanych rejestrach sprzętowych np od adc czy podobnych. Taki rejestr wpisuje się i odczytuje bardzo szybko, jednocześnie nie traci zawartości..

jest to jakiś pomysł no ale ma się nijak do static register

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



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 11 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