-
Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.chmurka.net!.POSTED.pi.v.chmurka.n
et!not-for-mail
From: q...@t...no1 (Queequeg)
Newsgroups: pl.misc.elektronika
Subject: Re: Zagwozdka w C Keil - wyjaśnienie.
Date: Sat, 16 Feb 2019 22:26:28 +0000 (UTC)
Organization: news.chmurka.net
Message-ID: <b...@t...no1>
References: <q3q59d$hp9$1@node1.news.atman.pl> <q3vee4$o74$1@node1.news.atman.pl>
<5c63f185$0$476$65785112@news.neostrada.pl>
<q41tof$422$1@node1.news.atman.pl>
<2...@t...no1>
<5c654649$0$519$65785112@news.neostrada.pl>
<4...@t...no1>
<5c655a35$0$503$65785112@news.neostrada.pl>
NNTP-Posting-Host: pi.v.chmurka.net
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-2
Content-Transfer-Encoding: 8bit
Injection-Date: Sat, 16 Feb 2019 22:26:28 +0000 (UTC)
Injection-Info: news.chmurka.net; posting-account="gof";
posting-host="pi.v.chmurka.net:172.24.44.20"; logging-data="28379";
mail-complaints-to="abuse-news.(at).chmurka.net"
User-Agent: tin/2.4.2-20171224 ("Lochhead") (UNIX) (Linux/4.4.50-v7+ (armv7l))
Cancel-Lock: sha1:+JE3nCakfetYiQBF5hx/qZIeR0w=
Xref: news-archive.icm.edu.pl pl.misc.elektronika:741068
[ ukryj nagłówki ]J.F. <j...@p...onet.pl> wrote:
> W sumie poprawnie - jeszcze nie wie ktore funkcje beda uzyte, to musi
> skompilowac poprawnie.
> Ale trzeba bylo sprawdzic ze static.
Sprawdziłem, nie ma różnicy w wygenerowanym kodzie.
Diff:
#v+
--- test-no-static.s 2019-02-16 23:19:27.993290080 +0100
+++ test-static.s 2019-02-16 23:19:20.653290321 +0100
@@ -29,7 +29,7 @@
.L6:
.align 2
.L5:
- .word i
+ .word .LANCHOR0
.size fn1, .-fn1
.align 2
.global fn2
@@ -45,8 +45,14 @@
.L9:
.align 2
.L8:
- .word i
+ .word .LANCHOR0
.size fn2, .-fn2
- .comm i,4,4
+ .bss
+ .align 2
+.LANCHOR0 = . + 0
+ .type i, %object
+ .size i, 4
+i:
+ .space 4
.ident "GCC: (Raspbian 4.9.2-10) 4.9.2"
.section .note.GNU-stack,"",%progbits
#v-
> A potem ...
>
> static void fn2(void) { i = 40; }
>
> i jej nie wywolywac.
Tak, to zmienia postać rzeczy.
Z samym `int i;` fn1 wygląda wtedy:
#v+
ldr r3, .L5
ldr r3, [r3]
.L2:
cmp r3, #42
bne .L2
#v-
A ze statycznym:
#v+
.L2:
b .L2
#v-
> static void fn2(void) { i = 40; }
>
> main()
> {
> fn() ;
> fn2();
> }
Tak... to zrobił ciekawie.
Jeśli main jest niestatyczne, to wygenerował ciało fn1() a jeśli jest
statyczne, to zamienił na nieskończoną pętlę.
> No i ciekawe, na ile dobrze zoptymalizuje :-)
Nie wiem czemu to:
#v+
static int i;
void fn1(void) { while (i != 42) ; }
static void fn2(void) { i = 40; }
void fn3(void) { fn1(); fn2(); }
#v-
spowodowało wygenerowanie ciała fn1:
#v+
ldr r3, .L5
ldr r3, [r3]
.L2:
cmp r3, #42
bne .L2
#v-
--
Eksperymentalnie: http://facebook.com/groups/pl.misc.elektronika
Następne wpisy z tego wątku
- 17.02.19 03:55 k...@g...com
- 17.02.19 09:16 Mateusz Viste
- 17.02.19 11:57 J.F.
- 19.02.19 13:14 Queequeg
Najnowsze wątki z tej grupy
- System operacyjny dla 6800?
- Przyłączenie działki do sieci elektrycznej
- Działalność nierejestrowana/definicja sprzętu elektronicznego/misie i kolejki
- Smukły, długi ściągacz izolacji do kynaru
- rezystor 3 omy 400W
- [newbie] Jaki multimetr za 2-4 stówy?
- szafka sieciowa
- Raspberry Pi 5 + dyski SATA
- lutownica na węgiel
- Znów czary (albo niewiedza) - tym razem fotowoltaika
- Chess
- Vitruvian Man - parts 7-11a
- przeźroczyste koszulki
- Re: Win 10/11 nie lubi OKI
- Programator czasowy TUYA.
Najnowsze wątki
- 2024-05-18 Warszawa => Mid PHP Developer (Laravel) <=
- 2024-05-18 Warszawa => Software .Net Developer <=
- 2024-05-18 Warszawa => Mid/Senior QA Engineer <=
- 2024-05-18 Ulm => Solution Architect (sichere Kommunikation und IoT-Loesungen <=
- 2024-05-18 Katowice => Head of Virtualization Platform Management and Operating S
- 2024-05-18 Warszawa => SAP WM Consultant / Execution <=
- 2024-05-18 Wrocław => Consultant/Implementer Comarch ERP XL <=
- 2024-05-18 Gdańsk => Head of International Freight Forwarding Department <=
- 2024-05-18 Warszawa => Account Manager (Recruitment Services) <=
- 2024-05-18 Łódź => Salesperson - CRM Systems <=
- 2024-05-18 Łódź => Handlowiec - Systemy CRM <=
- 2024-05-17 ZŁOMNIK o pracy w TVN TURBO, nowych przepisach i współczesnej motoryzacji. Turbo Taryfa!
- 2024-05-17 Białystok => DevOps Engineer Conexa First (Contractor) <=
- 2024-05-17 Warszawa => Starszy inżynier oprogramowania (Rust) <=
- 2024-05-17 Zabrze => Junior HelpDesk <=