-
Data: 2019-02-14 11:42:00
Temat: Re: Zagwozdka w C Keil - wyjaśnienie.
Od: "J.F." <j...@p...onet.pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]Użytkownik "Queequeg" napisał w wiadomości grup
dyskusyjnych:2e88332d-3364-4f9b-b65d-7ecbd98a9931@tr
ust.no1...
Irek.N. <t...@j...taki.jest.pl> wrote:
>>> A swoja droga - czy Keil sam ich nie wylacza ? Dla zmiennych
>>> volatile
>>> powinien.
>
>> Niestety ale ignoruje zupełnie volatile, a nie powinien moim
>> zdaniem.
>Skąd wiesz?
>Zrób test. Napisz funkcję:
>int i;
>void fn(void) { do { } while (i != 42); }
>Skompiluj z optymalizacją, zobacz kod. Potem dodaj volatile, zobacz
>kod.
>Sprawdziłem na raspi (arm), gcc -O2 -S.
>Bez volatile:
> ldr r3, .L5
> ldr r3, [r3] ; tu ładuje zmienną do rejestru
>.L2:
> cmp r3, #42 ; tu porównuje rejestr
> bne .L2 ; tu skacze z powrotem do porównania
kiepski optymalizator ... czemu porownuje w petli ?
>Jeszcze ciekawiej się robi, gdy dodasz modyfikator `static`. Bez
>volatile,
>arm:
>.L2:
> b .L2
I to jest prawidlowe :-)
>Dlaczego tak? Bo kompilator wie, że inna jednostka kompilacji nie
>zmieni
>wartości tej zmiennej (bo jest statyczna, widoczna tylko w obrębie
>danej
>jednostki kompilacji), więc nie ma sensu żadne sprawdzanie, bo
>zmienna i
>tak jest zero (bo zmienne globalne są inicjalizowane zerami; spróbuj
>zamiast 42 wstawić 0 i zobacz, jaki kod wtedy kompilator wygeneruje).
wstaw 41.
Albo w jakiejs funkcji wpisz i=40 ...
J.
Następne wpisy z tego wątku
- 14.02.19 11:49 Grzegorz Niemirowski
- 14.02.19 11:59 Queequeg
- 14.02.19 12:14 Queequeg
- 14.02.19 13:07 J.F.
- 14.02.19 13:11 J.F.
- 14.02.19 13:15 J.F.
- 14.02.19 13:25 Queequeg
- 14.02.19 13:36 Grzegorz Niemirowski
- 14.02.19 13:52 a...@m...uni.wroc.pl
- 14.02.19 13:59 Queequeg
- 14.02.19 14:01 Grzegorz Niemirowski
- 14.02.19 14:02 Queequeg
- 14.02.19 14:04 Queequeg
- 14.02.19 14:07 Queequeg
- 14.02.19 17:03 J.F.
Najnowsze wątki z tej grupy
- Akumulatorki Ni-MH AA i AAA Green Cell
- Dławik CM
- JDG i utylizacja sprzetu
- Identyfikacja układ SO8 w sterowniku migających światełek choinkowych
- DS1813-10 się psuje
- Taki tam szkolny problem...
- LIR2032 a ML2032
- SmartWatch Multimetr bezprzewodowy
- olej psuje?
- Internet w lesie - Starlink
- Opis produktu z Aliexpress
- No proszę, a śmialiście się z hindusów.
- Zewnętrzne napięcie referencyjne LM385 1,2V -> 100mV dla ICL7106, Metex M-3800
- karta parkingowa
- Wl/Wyl (On/Off) bialy/niebieski
Najnowsze wątki
- 2024-12-03 Tymoteusz Sz.
- 2024-12-03 Re: Prezydent ułaskawia: Prezydent USA Biden (D) ułaskawia syna własnego
- 2024-12-03 Re: Tani dodatkowy sim do smartwacha
- 2024-12-03 Wróblewo => Analityk finansowy <=
- 2024-12-03 Praktyczny test GPS...
- 2024-12-02 Tak się sprzedają elektryczne woldzwageny ;-)
- 2024-12-02 Akumulator do Hyundai
- 2024-12-02 Olsztyn => Sales Specialist <=
- 2024-12-02 Poznań => Technical Artist <=
- 2024-12-02 Bieruń => Regionalny Kierownik Sprzedaży (OZE) <=
- 2024-12-02 Kraków => Business Development Manager - Dział Sieci i Bezpieczeńst
- 2024-12-02 Chrzanów => Team Lead / Tribe Lead FrontEnd <=
- 2024-12-02 Białystok => Delphi Programmer <=
- 2024-12-02 Poznań => Dyspozytor Międzynarodowy <=
- 2024-12-02 Szczecin => Key Account Manager (ERP) <=