Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Rekomendowane odpowiedzi

Opublikowano

Mam taki kod:

To jest ukryta treść, proszę

 

Czemu nie nie wysyła czegoś takiego:

To jest ukryta treść, proszę

?

 

I jeszcze jedno.

Jeżeli wykonałeś ćwiczenie praktyczne z niniejszego rozdziału to zapewne nieświadomy niczego utworzyłeś dwie zmienne wewnątrz funkcji dodawanie oraz dwie zmienne wewnątrz funkcji odejmowanie. Jeżeli tego nie zrobiłeś to znaczy, że albo nie wykonałeś zadania albo wykonałeś je źle, bowiem użyłeś zmiennych globalnych o których nie powinieneś nic wiedzieć. Jeżeli użyłeś zmiennych globalnych to znaczy, że albo użyłeś Internetu w sposób niewłaściwy albo jakiś 'mądry' kolega doradził Ci najgorsze możliwe rozwiązanie ze zmiennymi globalnymi. Jeżeli sam wpadłeś na niepoprawne rozwiązanie - to da się wybaczyć, ale raczej jest to mało prawdopodobne jeżeli uczysz się programowania od zera z niniejszego kursu. Przytoczmy najpierw poprawnie napisaną funkcję dodawanie:

Dlaczego zmienne globalne to zuo?

 

Btw, korzystam z tego kursu:

To jest ukryta treść, proszę

//Zakaz gifów-Dektored

Opublikowano

Zmienne globalne to nie zło, ale zajmują pamięć.

Zmienne lokalne wrzucane są na stos, a potem - po wykonaniu funkcji - są z niego zdejmowane i ich więcej nie ma, nie zajmują pamięci.

 

To jest ukryta treść, proszę

To jest bitwise right shift operation bez skutków ubocznych, więc całkowity nonsens.

 

Wartość i+1 jest przesuwana w prawo o a bitów a potem... no włąśnie, nic.

 

Wyrzuć to, bo pewnie w ogóle nie chciałeś tego robić. (choć nie ma to żadnego - jak napisałem - skutku ubocznego)

 

- - - - - -

 

Drukowane są całkowicie* przypadkowe wartości, gdyż w żadnym miejscu nie uzupełniasz tablicy.

Zadeklarowanie tablicy rezerwuje tylko w pamięci miejsce. To, co tam było, wciąż tam się znajduje.

A były tam śmieci.

 

* nie do końca przypadkowe, ale tak czy inaczej - są to śmieci nieprzydatne do niczego

 

 

 

- - - - - -

 

Po zamianie

To jest ukryta treść, proszę

na

To jest ukryta treść, proszę

 

Uzyskujemy efekt, o który jęczałeś. Ale nie mam najmniejszego pojęcia, czy takim sposobem, o jaki ci chodziło.

 

Zakładam, że linia z bitwise right shiftem jest całkowicie błędna, i miało tam być coś takiego.

Ta sygnatura jest pusta.

Opublikowano

Ponieważ używanie zmiennych globalnych negatywnie rzutuje na czytelność kodu.

 

tablice od razu wypełnioną NIE przypadkowymi elementami mozesz uzyskać dodając przed typem tablicy słówko 'static'

 

np:

 

static char [1000];

 

uzyskasz wtedy 1000 elementową tablice wypełnioną zerami.

Wygrywaj bez pychy, przegrywaj bez urazy

Opublikowano (edytowane)

Co do zmiennych globalnych - jest waniejsza rzecz, niż to, co powiedział Kidjamas. Zmienne globalne działają wolniej od lokalnych.

Edit - powyżeszego nie jestem pewien, chłopaki niżej mówią, że nieprawda.

 

>> static char [1000];

Tylko po co?

 

>>static; w ogólności oznacza, że obiekt taki istnieje przez cały czas, niezależnie od zasięgu, który go używa. Dla funkcji oraz zmiennych globalnych oznacza z kolei zniesienie zewnętrznego symbolu obiektu lub funkcji (tzn. poza bieżącą jednostką kompilacji, czyli plikiem, nic nie może z tego korzystać)

Nie sądzisz, że to raczej głupota i marnotractwo pamięci?

 

Zrób tak:

 

char letters[ NUMBER_OF_LETTERS ];

memset( letters, 0, NUMBER_OF_LETTERS );

 

http://www.cplusplus.com/reference/clibrary/cstring/memset/

 

Robię się zbyt pomocny, pomagam ludziom którzy nie szukają.

Edytowane przez spider44

Jeżeli szukasz pomocy, piszesz poprawnie po polsku, a rozwiązaniem twojego problemu nie jest pierwszy link w google - prawdopodobnie pomogę.

Jeżeli chcesz gotowca, to najpierw podaj cenę. Cenę w pln, bo za plusy pracują lamusy :)

Opublikowano (edytowane)

zmienne globalne działają wolniej ?

 

dawno takich bredni nie słyszałem.

Oczywiście że zmienne lokalne i globalny działają tak szybko

 

 

a co do static :

 

To jest ukryta treść, proszę

 

 

zuzycie pamięci ? niecały megabajt

wnioske jest prosty - pamięc na zmienna z modyfikatorem static jest również uwalniana po wyjściu z funkcji.

Więc nie rozumiem, jakie marnotractwo pamięci ? Dzięki temu możemy też deklarować większe zmienne lokalne ponieważ stos ma swój ograniczony rozmiar a jeżeli użyjemy modyfikatra static

zmienna zostanie stworzona w innym miejscu w pamięci

 

dowód :

 

 

To jest ukryta treść, proszę

 

Tu będzie wszytko ok.

 

A tu :

To jest ukryta treść, proszę

już nie

 

 

 

 

 

 

Podsumowując - drogi spajderze, nie wprowadzaj innych w błąd, bo chłopak widać początkujacy, gotów Ci uwierzyć.

No no, nie słuchajcie spajdera bo naprawde pierdoli głupoty :)

Edytowane przez Kidjamkas

Wygrywaj bez pychy, przegrywaj bez urazy

Opublikowano
Zmienne globalne działają wolniej od lokalnych.

 

Już kiedyś był o tym wątek, i według Osamy, szybkość dostępu jest dokładnie taka sama. Nie mam powodów by wątpić w tę opinię.

 

tablice od razu wypełnioną NIE przypadkowymi elementami mozesz uzyskać dodając przed typem tablicy słówko 'static'

 

Nie. Static służy do czegoś zupelnie innego, a automatyczna inicjalizacja zerami to tylko efekt uboczny głównej funkcjonalności.

 

To jest ukryta treść, proszę

Wystarczy. I jest szybszy niż memset();

 

 

wnioske jest prosty - pamięc na zmienna z modyfikatorem static jest również uwalniana po wyjściu z funkcji.

 

Debilny eksperymentator, to i debilny wniosek.

Nie wspominając o tym, że pierdolony kłamca. Powyższego programu nie sposób nawet uruchomić, skarbie ;*

 

Ale załóżmy, załózmy, że masz bardzo, ale to bardzo przyjazny i troskliwy kompilator, sprzeczny z ISO C++'a, konkretniej z fragmentem traktującym o konieczności deklarowaniu funkcji przed ich wywoływaniem..... :fail:

 

Twój kompilator wtedy olewa wszystkie fragmenty bez skutków ubocznych (to się nazywa, uwaga optymalizacja) i w efekcie twój kod nie robi absoltunie nic. Pamięć na tablicę nie zotanie zarezerwowana w żadnym momencie. (*)

 

 

 

Reasumując,

Shut the hell fuck up and go do some laundry, bitch.

 

 

 

(*)

Być może zachodzi jeszcze jakiś inny mechanizm optymalizacji kompilatora, a być może rezerwacja pamięci na tablice odbywa się w jeszcze inny sposób. Nie wiem. Nie przebijałem sie przez standaryzacje i dokumentacje techniczne.

Point is, u dont know what ur talkin bout bitch.

Ta sygnatura jest pusta.

Opublikowano

>> Już kiedyś był o tym wątek, i według Osamy, szybkość dostępu jest dokładnie taka sama. Nie mam powodów by wątpić w tę opinię.

Ostatnio rzadziej bawię się w C, przyznam, że mogę się mylić. Nie mam powodów, by nie wierzyć Osamie.

 

>> Nie. Static służy do czegoś zupelnie innego, a automatyczna inicjalizacja zerami to tylko efekt uboczny głównej funkcjonalności.

To chciałem powiedzieć.

 

>> int array[123] = {0};

Ano prawda, nie wiem czemu strzelił mi do głowy memset. Może zmęczenie - tak czy inaczej podany przez Ciebie sposób jest efektywniejszy.

 

 

>> Podsumowując - drogi spajderze, nie wprowadzaj innych w błąd, bo chłopak widać początkujacy, gotów Ci uwierzyć.

Nie zwykłem celowo wprowadzać ludzi w błąd. Ja nie znam osób nieomylnych, widocznie obracasz się w znacznie lepszym towarzystwie. Ktoś musi być gorszy, by lepszy mógł być ktoś.

 

>> zmienne globalne działają wolniej ?

>> dawno takich bredni nie słyszałem.

>> Oczywiście że zmienne lokalne i globalny działają tak szybko

Czy powyższe nie koliduje z tym niżej? :)

>> Wygrywaj bez pychy, przegrywaj bez urazy

 

Wiesz Kidjamas, rzucił bym jeszcze w twoją stronę parę epitetów, ale powoli wyrastam z wykłócania się z dziećmi na forach. Przykro mi, ale musisz sobie znaleźć innego partnera do robienia wiochy.

Jeżeli szukasz pomocy, piszesz poprawnie po polsku, a rozwiązaniem twojego problemu nie jest pierwszy link w google - prawdopodobnie pomogę.

Jeżeli chcesz gotowca, to najpierw podaj cenę. Cenę w pln, bo za plusy pracują lamusy :)

Opublikowano

Drogi 4gr, pisałem to o póżnej godzinie, ale czy to ważne ? Mój kod nie miał być poprawny tylko pokazać o co mi chodzi, gdybyś naprawdę przetestował mój kod wprowadzając małą poprawkę zrozumiałbyś że mam rację.

 

Pamięc jest uwalniana i jestem tego pewien.

 

 

Nie usłyszałem od Ciebie żadnych merytorycznych argumentów oprócz czepiania się nieistotnych szczegółów.

Wygrywaj bez pychy, przegrywaj bez urazy

Opublikowano
Mój kod nie miał być poprawny tylko pokazać o co mi chodzi

 

Na podstawie tego kodu wyciągnąłeś wniosek "mniej niż MB zajętej pamięci".

 

Policzyłeś na palcach, skoro nawet nie odpalałeś?

Ta sygnatura jest pusta.

Opublikowano

Po prostu programuje już tyle czasu że wiem takie rzeczy i nie muszę za każdym razem tego sprawdzać.

 

Nie pisałem tego żeby SAMEMU się o tym przekonać, ponieważ ja to wiem. Napisałem to po to żebyś TY to zrozumiał.

 

 

kpw ?

Wygrywaj bez pychy, przegrywaj bez urazy

×
×
  • Dodaj nową pozycję...