-
Path: news-archive.icm.edu.pl!news.icm.edu.pl!opal.futuro.pl!news.internetia.pl!not-f
or-mail
From: Michoo <m...@v...pl>
Newsgroups: pl.misc.elektronika
Subject: Re: [OT] koszt 'virtual' na ARM
Date: Sat, 05 May 2012 22:50:52 +0200
Organization: Netia S.A.
Lines: 100
Message-ID: <jo43vv$guu$1@mx1.internetia.pl>
References: <4f9d25af$1$1209$65785112@news.neostrada.pl>
<jnk77t$895$1@mx1.internetia.pl> <jnk8f0$r2r$1@node2.news.atman.pl>
<jnk9gt$64k$1@news.dialog.net.pl> <jnkd05$vuu$1@node2.news.atman.pl>
<jnkghf$9m$1@mx1.internetia.pl> <jnkhcv$9v6$1@news.dialog.net.pl>
<jnldta$e37$1@mx1.internetia.pl> <o...@j...jedi>
<jnmqll$dqi$2@inews.gazeta.pl> <o...@j...jedi>
<jnmvba$pbl$1@inews.gazeta.pl> <o...@j...jedi>
<jnn0o5$ssr$1@inews.gazeta.pl> <o...@j...jedi>
<jnn2ld$3ti$1@inews.gazeta.pl> <o...@j...jedi>
<jnomqu$stm$1@inews.gazeta.pl> <o...@j...jedi>
<jnprj1$oao$1@inews.gazeta.pl> <jns5kg$f21$1@inews.gazeta.pl>
<jnsacs$rph$1@inews.gazeta.pl> <jnuqev$11e$1@inews.gazeta.pl>
<jnuugj$ada$1@inews.gazeta.pl> <jo17h0$rvv$1@inews.gazeta.pl>
<jo2i12$8ms$1@inews.gazeta.pl> <jo37cn$io3$1@inews.gazeta.pl>
<jo3crt$1k1$1@inews.gazeta.pl> <jo3p45$rtv$1@inews.gazeta.pl>
NNTP-Posting-Host: 83.238.197.12
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
X-Trace: mx1.internetia.pl 1336251199 17374 83.238.197.12 (5 May 2012 20:53:19 GMT)
X-Complaints-To: a...@i...pl
NNTP-Posting-Date: Sat, 5 May 2012 20:53:19 +0000 (UTC)
In-Reply-To: <jo3p45$rtv$1@inews.gazeta.pl>
X-Tech-Contact: u...@i...pl
User-Agent: Mozilla/5.0 (X11; Linux i686 on x86_64; rv:8.0) Gecko/20120216
Icedove/8.0
X-Server-Info: http://www.internetia.pl/
Xref: news-archive.icm.edu.pl pl.misc.elektronika:630630
[ ukryj nagłówki ]On 05.05.2012 19:47, Jerry1111 wrote:
> Nie jest za darmo, jesli wstawi gdzies ciag znakow "virtual" (bo nie wie
> ze nie wolno) i 3 dni bedzie szukal czemu "Hello world" nie miesci sie
> do flasha.
Moją magisterkę na ARMa z 8k flash i 32k flash piszę w hardcore C++ z:
- obiektami
- szablonami
- metaprogramowaniem (łącznie z testem, czy boost::mpl zadziała)
W planach właśnie dodanie polimorfizmu dynamicznego.
Dopisałem do projektu następujące klasy:
class foo{
public:
virtual void f(){uart_print("foo\r\n");}
};
class bar:public foo{
void f(){uart_print("bar\r\n");}
};
class foobar:public bar{
void f(){uart_print("foobar\r\n");}
};
class oof:public foo{
void f(){uart_print("oof\r\n");}
};
I do main dopisałem:
int ll=uart_read_int();
foo f;
bar b;
foobar fb;
oof o;
foo* ff;
if(ll==1){
ff=&f;
}else if(ll==2){
ff=&b;
}if(ll==3){
ff=&fb;
}else{
ff=&o;
}
ff->f();
Binarka przytyła po tym o 200 bajtów:
text data bss dec hex filename
4012 8 168 4188 105c firmware.elf
4212 8 168 4388 1124 firmware2.elf
- 28 bajtów to sam wypisywany tekst
- po 8 bajtów na metodę [1]
- 48 bajtów dodatkowego kodu w main (o tym za chwilę)
- po 16 bajtów na vtable dla klasy
W main został wygenerowany następujący kod:
0x000006a4 <+56>: ldr r3, [pc, #224] ; (0x788 <main()+284>)
0x000006a6 <+58>: str r3, [sp, #4]
0x000006a8 <+60>: ldr r3, [pc, #224] ; (0x78c <main()+288>)
0x000006aa <+62>: str r3, [sp, #8]
0x000006ac <+64>: ldr r3, [pc, #224] ; (0x790 <main()+292>)
0x000006ae <+66>: str r3, [sp, #12]
0x000006b0 <+68>: ldr r3, [pc, #224] ; (0x794 <main()+296>)
0x000006b2 <+70>: str r3, [sp, #16]
0x000006b4 <+72>: ldr r3, [r4, #0]
//czyli po 2 instrukcje na stworzenie obiektu na stosie
0x000006b6 <+74>: cmp r3, #1
0x000006b8 <+76>: beq.n 0x6c6 <main()+90>
0x000006ba <+78>: cmp r3, #2
0x000006bc <+80>: beq.n 0x6ca <main()+94>
0x000006be <+82>: cmp r3, #3
0x000006c0 <+84>: bne.n 0x6ce <main()+98>
0x000006c2 <+86>: add r0, sp, #12
0x000006c4 <+88>: b.n 0x6d0 <main()+100>
0x000006c6 <+90>: add r0, sp, #4
0x000006c8 <+92>: b.n 0x6d0 <main()+100>
0x000006ca <+94>: add r0, sp, #8
0x000006cc <+96>: b.n 0x6d0 <main()+100>
0x000006ce <+98>: add r0, sp, #16
// 13 instrukcji na obsłużenie 4 if-else
0x000006d0 <+100>: ldr r3, [r0, #0]
0x000006d2 <+102>: ldr r3, [r3, #0]
0x000006d4 <+104>: blx r3
// 3 instrukcje na wywołanie funkcji wirtualnej
To gdzie są te straszne koszta 'virtual'?
[1]
Dump of assembler code for function foo::f():
0x00000670 <+0>: ldr r0, [pc, #4] ; (0x678 <foo::f()+8>)
0x00000672 <+2>: b.w 0x3b4 <uart_print(char const*)>
0x00000676 <+6>: nop
0x00000678 <+8>: lsrs r7, r3, #18
0x0000067a <+10>: movs r0, r0
--
Pozdrawiam
Michoo
Następne wpisy z tego wątku
- 05.05.12 22:59 Sebastian Biały
- 05.05.12 23:06 Michoo
- 05.05.12 23:13 Sebastian Biały
- 05.05.12 23:34 RoMan Mandziejewicz
- 05.05.12 23:54 Andrzej Ekiert
- 06.05.12 00:11 Jerry1111
- 06.05.12 00:26 Michoo
- 06.05.12 00:30 Jerry1111
- 06.05.12 00:36 Jerry1111
- 06.05.12 01:13 Andrzej Ekiert
- 06.05.12 01:21 Sebastian Biały
- 06.05.12 10:57 Jerry1111
- 06.05.12 12:13 Sebastian Biały
- 06.05.12 13:47 Michoo
- 06.05.12 14:28 Michoo
Najnowsze wątki z tej grupy
- w czasach LED komary mają ciężko
- walizka z kodami
- Rejestrator temperatur - termopara, siec
- Router LTE z możliwością zmian MTU
- Fajny film widziałem...
- Jaka ładowarka sieciowa do Iphona?
- Taśma izolacyjna do prac elektrycznych
- Recenzja 3.1A ;) w 6 gniazdach...
- Re: Recenzja 3.1A ;) w 6 gniazdach...
- Re: Recenzja 3.1A ;) w 6 gniazdach...
- Re: Recenzja 3.1A ;) w 6 gniazdach...
- Wkrętarki, wiertarki...
- Zasilacz impulsowy 12V 10A, coś godnego uwagi jako zamiennik akumulatora wkrętarki
- Mouser - koszt wysyłki
- [OT] Jak wycinac ksztalt w piance lub styropianie?
Najnowsze wątki
- 2025-07-16 dron na granicy polsko niemieckiej
- 2025-07-16 Warszawa => Senior IT Recruitment Consultant <=
- 2025-07-16 Gdańsk => Mainframe (z/OS, Assembler) Developer <=
- 2025-07-16 Gdańsk => Delphi Programmer <=
- 2025-07-16 Warszawa => BI Developer <=
- 2025-07-16 Gdańsk => Programista Delphi <=
- 2025-07-16 chroń PESEL dziecka
- 2025-07-16 Rzeszów => Spedytor Międzynarodowy <=
- 2025-07-16 Gdańsk => Konsultant wdrożeniowy (systemy controlingowe) <=
- 2025-07-16 Kraków => Kotlin Developer <=
- 2025-07-16 Warszawa => Inżynier oprogramowania .Net <=
- 2025-07-16 Tadeusz Rolke RIP
- 2025-07-14 Dwa dylematy
- 2025-07-14 Re: Dwa dylematy
- 2025-07-14 [UOKiK] Jeronimo Martins, właścicielowi sieci Biedronka, [przedstawił zarzut] udział[u] w zmowie z 32 firmami transportowymi.