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



Teraz jest 16 sty 2025, o 14:09


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 12 cze 2013, o 18:23 
Offline
Moderator
Avatar użytkownika

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

ale po co definiować je jako globalne - jeśli wykorzystywane są tylko w funkcji ? ;)

zapomniałeś o magicznym w C specyfikatorze

static

;) i po bólu - są lokalne ale zachowują się jak globalne

_________________
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: 12 cze 2013, o 19:46 
Offline
Moderator
Avatar użytkownika

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

robiw napisał(a):
Ano Mirku, nie zapomniałem...tylko kwestia kodu, jaki generuje kompilator dla static lub dla "typowych" lokalnych. Chodzi wyłącznie o kod...R


Nie rozumiem o jaki ci kod chodzi ? .... zmienne są umieszczane w obszarze zmiennych globalnych i tak samo inicjalizowane zerem. O jakim ty kodzie mówisz ? toż działa ten sam, który inicjalizuje wszystkie globalne

_________________
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: 12 cze 2013, o 22:16 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Dodanie słówka register przy deklaracji zmiennej może coś zmienić, ale to tylko sugestia dla kompilatora.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 cze 2013, o 07:39 
Offline
Moderator
Avatar użytkownika

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

robiw napisał(a):
O kodzie, jaki generuje kompilator w celu optymalizacji dostępu do zmiennych


Nie ma żadnych różnic w zakresie optymalizacji dostępu do zmiennych czy to lokalnych czy globalnych czy tych lokalnych ze słówkiem "static" - to jakieś nieporozumienie i troszkę (wydaje mi się doszukiwanie się problemu tam gdzie go nie ma) .... a sposoby dostępu możesz sobie prześledzić w wygenerowanym kodzie ASM to sam się przekonasz.

A co za różnica czy zmienna jest lokalna, globalna czy static - jeśli chodzi o sam dostęp do niej ? żadna - wszystkie są w RAM, w tym samym RAM w tym samym procku (no chyba że ktoś zewnętrznego używa) ;) .... więc nie ma czegoś takiego jak podział na optymalizację dostępu pomiędzy takimi zmiennymi, nie ma.

Jedyne co powoduje pewien narzut to tylko fakt, że zmienna lokalna może być i to TYLKO czasem a nie ZA KAŻDYM razem tworzona na stosie. Tak tak ... tak działa optymalizacja - jak trzeba to nawet na stosie jej nie utworzy tylko skorzysta z rejestru albo kilku rejestrów. No chyba że tych zmiennych będzie bardzo dużo .... np jakieś tablice.

Na prawdę - warto podglądać sobie plik *.lss i robić proste przykłady a wszystko stanie się jasne.

_________________
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: 13 cze 2013, o 10:33 
Offline
Moderator
Avatar użytkownika

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

robiw napisał(a):
No chyba jest, bo pobranie jej ze stosu wygląda chyba nieco inaczej (dłużej) aniżeli dostęp do "typowego" miejsca zmiennej w RAM


Ciekaw jestem skąd takie pomysły kosmiczne ? ;) .... a stos to co ? nie pamięć RAM ? no kolega żartuje ... ;)

KAŻDE miejsce w RAM czy to zmienna lokalna czy ... (już nie będę się powtarzał) .... więc KAŻDE takie miejsce jest TYPOWE ....

jeszcze raz powiem - czy nie możesz zajrzeć do pliku *.LSS ?

napisz sobie prosty test, pusty main z jedną funkcją a w niej jedną zmienną dowolnego typu i obserwuj - to się w ogóle zdziwisz że przy -Os wcale zmienna nie jest tworzona na stosie tylko w rejestrze!

A jak dasz ich więcej albo jakąś tablicę - to wtedy zobaczysz i porównasz dostęp zarówno gdy zmienna będzie globalna albo statyczna i znowu się zdziwisz że nie mają racji bytu takie pomysły o dziwnym podziale optymalizacji jeśli chodzi o dostęp do różnego rodzaju zmiennych a szczególnie tych na stosie ;)

_________________
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: 13 cze 2013, o 11:29 
Offline
Moderator
Avatar użytkownika

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

No ale właśnie NIE ;) .... nie rozumiesz - narzut dotyczy tego że powstanie kilka rozkazów POP w asemblerze aby utworzyć zmienną na stosie ..... i to WSZYSTKO ..... a mechanizm dostępu w dalszej części NICZYM się nie różni ;) .... no jak nie wierzysz i nie chcesz sprawdzić to proponuję ZAKŁAD o krzynkę dobrego trunku ;)

_________________
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: 13 cze 2013, o 13:59 
Offline
Użytkownik

Dołączył(a): 31 paź 2012
Posty: 99
Pomógł: 4

Wydaje mi się , że koledze robiw chodzi właśnie o te kilka rozkazów odłożenia i pobrania zmiennej ze stosu w przypadku definiowania zmiennych lokalnych , czego nie ma w przypadku , że tak powiem dostępu do zmiennych globalnych które na stos odkładane nie są . Pytanie tylko po co takie drążenie tematu ? Gdyż różnice w wykorzystaniu pamięci jak również w szybkości wykonania programu są raczej pomijalne ( o ile w ogóle występują).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 cze 2013, o 14:10 
Offline
Moderator
Avatar użytkownika

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

Ale panowie - jeszcze raz powiem, hmm podpowiem bo może to nie do wszystkich dotarło a później pojawiają się pytania tzn pomysły że dostęp do zmiennych na stosie jest inny .... może nawet warto było podrążyć ten temat żeby do końca każdy zrozumiał

Cytuj:
Wydaje mi się , że koledze robiw chodzi właśnie o te kilka rozkazów odłożenia i pobrania zmiennej ze stosu w przypadku definiowania zmiennych lokalnych , czego nie ma w przypadku , że tak powiem dostępu do zmiennych globalnych które na stos odkładane nie są


TYLE TYKO że te zmienne (static) NIE SĄ TWORZONE przy wchodzeniu w funkcję jak zmienne LOKALNE, a na tym samym etapie co zmienne GLOBALNE ... teraz jaśniej ? dlatego w przypadku static wewnątrz funkcji nie ma ŻADNEGO narzutu na tworzenie takiej zmiennej a jest ona poza ograniczonym zakresem widoczności - nadal IDENTYCZNIE obsługiwana jeśli chodzi o dostęp do RAM jak każda inna zmienna czy to globalna, czy lokalna czy lokalna statyczna.

Jeśli zaś chodzi o lokalne bez static i zakładając, że już kompilator zdecyduje się je umieszczać na stosie - to NARZUT czasowy jest ALE TYLKO przy WEJŚCIU w funkcję, gdy trzeba je utworzyć na stosie - POTEM JUŻ OBSŁUGA znowu jak KAŻDEJ zmiennej w RAM

mam nadzieję że to już ostatecznie rozwieje to drążenie ;)

------------------------ [ Dodano po: 2 minutach ]

a jak kolega robiw chce udowodnić że jest inaczej to poproszę o przykład w asemblerze ... wtedy będziemy mogli porozmawiać konkretnie ... a tak? wystarczy po prostu znajomość co się dzieje i kiedy ze zmiennymi w C. Zresztą - te całe narzuty nawet dla zmiennych lokalnych i tak są pomijalne - więc nie podając powodu konkretnego dla którego się to drąży - wygląda to troszkę jak rozważania ile diabłów mieści się na czubku szpilki i dlaczego ? ;) aaa i który z nich straszniejszy

_________________
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: 8 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 6 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