c-kyhäelmä testaamassa prosessoria

Fysikaalikko

En tiedä miten harvoin minkäkinlaiset tietokoneet tekevät fysikaalisen virheen eli kääntävät bitin ykkösestä nollaksi tai nollasta ykköseksi jostain ohjelmiston ulkopuolisesta syystä, eli kai kosmisen säteilyn tai kvanttifluktuaation seurauksena. Onko se yksi miljardista laskusta, sadasta miljardista vai...

Siksi tein tämän:

#include
#include

unsigned int x=1;
unsigned int a=1;
unsigned int b=1;
unsigned int c=1;
unsigned int d=1;
int tes=1;
main(void)
{
alku:
a=1; b=1; c=1; d=1;
for(x=1; x

4

385

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • ei ole hyvää ohjelmointityyliä

      tee ennemmin while-silmukassa.

      aika pitkään saat odottaa virhettä jos koneesi on täysin kunnossa ja lämmöt pysyvät matalana.

      kellota konetta hieman ja kokeile sitten, virheitä alkaa tulla useammin ja useammin mitä korkeammalle kellot nousevat.

    • TRRY

      Ohjelmasi on sellainen, että kääntäjät saattavat optimoida hyvinkin paljon koodia pois.

      Normaalit optimoinnit päällä, eli komennolla "gcc -O2 a.c", kääntäjä optimoi koko for-silmukan muotoon

      movl $0x7ffffff9,0x8049600
      movl $0x7ffffff9,0x8049610
      movl $0x7ffffff9,0x804960c
      movl $0x7ffffff9,0x8049608
      movl $0x7ffffff9,0x8049604

      eli tässä sijoitetaan muuttujien x, a, b, c ja d muistipaikkoihin suoraan arvo 2147483641. Vielä pahempaa on, että koko seuraava if-lause, joka vertaa muuttujien erisuuruuksia, on myös optimoitu pois. Näin ollen ohjelma ei tulosta koskaan virhettä. Ei edes silloin, kun muistipaikkaan 0x8049608 olisi tallennettu kosmisen säteilyn takia väärä luku.

      Kääntäjän tuottamaa koodia voi tutkia antamani käännös komennon jälkeen esimerkiksi komennolla "objdump -d a.out".

      Jos optimointi estetään, ohjelmasi saa prosessorin tekemään mitä halusitkin.

      • Fysikaalikko

        Mikä parametri gcc:lle pitää antaa, jotta ne optimoinnit menee pois?

        Mikä on c-listaukseni yksinkertaisin monimutkaistus tai muutos, jotta kääntäjä ei normaaliparametreillä pääse tekemään mitä ei ole tarkoitettu?

        "
        "objdump -d a.out".
        "
        tulos:

        a.out: file format elf32-i386

        Disassembly of section .init:

        08048278 :
        8048278: 55 push %ebp
        8048279: 89 e5 mov %esp,%ebp
        804827b: 83 ec 08 sub $0x8,%esp
        804827e: e8 71 00 00 00 call 80482f4
        8048283: e8 c8 00 00 00 call 8048350
        8048288: e8 13 02 00 00 call 80484a0
        804828d: c9 leave
        804828e: c3 ret
        Disassembly of section .plt:

        08048290 :
        8048290: ff 35 08 96 04 08 pushl 0x8049608
        8048296: ff 25 0c 96 04 08 jmp *0x804960c
        804829c: 00 00 add %al,(%eax)
        ...

        080482a0 :
        80482a0: ff 25 10 96 04 08 jmp *0x8049610
        80482a6: 68 00 00 00 00 push $0x0
        80482ab: e9 e0 ff ff ff jmp 8048290

        080482b0 :
        80482b0: ff 25 14 96 04 08 jmp *0x8049614
        80482b6: 68 08 00 00 00 push $0x8
        80482bb: e9 d0 ff ff ff jmp 8048290

        080482c0 :
        80482c0: ff 25 18 96 04 08 jmp *0x8049618
        80482c6: 68 10 00 00 00 push $0x10
        80482cb: e9 c0 ff ff ff jmp 8048290
        Disassembly of section .text:

        080482d0 :
        80482d0: 31 ed xor %ebp,%ebp
        80482d2: 5e pop %esi
        80482d3: 89 e1 mov %esp,%ecx
        80482d5: 83 e4 f0 and $0xfffffff0,%esp
        80482d8: 50 push %eax
        80482d9: 54 push %esp
        80482da: 52 push %edx
        80482db: 68 20 84 04 08 push $0x8048420
        80482e0: 68 30 84 04 08 push $0x8048430
        80482e5: 51 push %ecx
        80482e6: 56 push %esi
        80482e7: 68 80 83 04 08 push $0x8048380
        80482ec: e8 bf ff ff ff call 80482b0
        80482f1: f4 hlt
        80482f2: 90 nop
        80482f3: 90 nop

        080482f4 :
        80482f4: 55 push %ebp
        80482f5: 89 e5 mov %esp,%ebp
        80482f7: 53 push %ebx
        80482f8: 83 ec 04 sub $0x4,%esp
        80482fb: e8 00 00 00 00 call 8048300
        8048300: 5b pop %ebx
        8048301: 81 c3 04 13 00 00 add $0x1304,%ebx
        8048307: 8b 93 fc ff ff ff mov 0xfffffffc(%ebx),%edx
        804830d: 85 d2 test %edx,%edx
        804830f: 74 05 je 8048316
        8048311: e8 8a ff ff ff call 80482a0
        8048316: 58 pop %eax
        8048317: 5b pop %ebx
        8048318: c9 leave
        8048319: c3 ret
        804831a: 90 nop
        804831b: 90 nop
        804831c: 90 nop
        804831d: 90 nop
        804831e: 90 nop
        804831f: 90 nop

        08048320 :
        8048320: 55 push %ebp
        8048321: 89 e5 mov %esp,%ebp
        8048323: 83 ec 08 sub $0x8,%esp
        8048326: 80 3d 40 96 04 08 00 cmpb $0x0,0x8049640
        804832d: 74 0c je 804833b
        804832f: eb 1c jmp 804834d
        8048331: 83 c0 04 add $0x4,%eax
        8048334: a3 24 96 04 08 mov %eax,0x8049624
        8048339: ff d2 call *%edx
        804833b: a1 24 96 04 08 mov 0x8049624,%eax
        8048340: 8b 10 mov (%eax),%edx
        8048342: 85 d2 test %edx,%edx
        8048344: 75 eb jne 8048331
        8048346: c6 05 40 96 04 08 01 movb $0x1,0x8049640
        804834d: c9 leave
        804834e: c3 ret
        804834f: 90 nop

        08048350 :
        8048350: 55 push %ebp
        8048351: 89 e5 mov %esp,%ebp
        8048353: 83 ec 08 sub $0x8,%esp
        8048356: a1 2c 95 04 08 mov 0x804952c,%eax
        804835b: 85 c0 test %eax,%eax
        804835d: 74 12 je 8048371
        804835f: b8 00 00 00 00 mov $0x0,%eax
        8048364: 85 c0 test %eax,%eax
        8048366: 74 09 je 8048371
        8048368: c7 04 24 2c 95 04 08 movl $0x804952c,(%esp)
        804836f: ff d0 call *%eax
        8048371: c9 leave
        8048372: c3 ret
        8048373: 90 nop
        8048374: 90 nop
        8048375: 90 nop
        8048376: 90 nop
        8048377: 90 nop
        8048378: 90 nop
        8048379: 90 nop
        804837a: 90 nop
        804837b: 90 nop
        804837c: 90 nop
        804837d: 90 nop
        804837e: 90 nop
        804837f: 90 nop

        08048380 :
        8048380: 8d 4c 24 04 lea 0x4(%esp),%ecx
        8048384: 83 e4 f0 and $0xfffffff0,%esp
        8048387: ff 71 fc pushl 0xfffffffc(%ecx)
        804838a: 55 push %ebp
        804838b: 89 e5 mov %esp,%ebp
        804838d: 51 push %ecx
        804838e: 83 ec 24 sub $0x24,%esp
        8048391: a1 3c 96 04 08 mov 0x804963c,%eax
        8048396: c7 05 28 96 04 08 f9 movl $0x7ffffff9,0x8049628
        804839d: ff ff 7f
        80483a0: c7 05 38 96 04 08 f9 movl $0x7ffffff9,0x8049638
        80483a7: ff ff 7f
        80483aa: c7 05 34 96 04 08 f9 movl $0x7ffffff9,0x8049634
        80483b1: ff ff 7f
        80483b4: c7 05 30 96 04 08 f9 movl $0x7ffffff9,0x8049630
        80483bb: ff ff 7f
        80483be: c7 05 2c 96 04 08 f9 movl $0x7ffffff9,0x804962c
        80483c5: ff ff 7f
        80483c8: 89 44 24 04 mov %eax,0x4(%esp)
        80483cc: c7 04 24 ec 84 04 08 movl $0x80484ec,(%esp)
        80483d3: e8 e8 fe ff ff call 80482c0
        80483d8: a1 38 96 04 08 mov 0x8049638,%eax
        80483dd: c7 04 24 f4 84 04 08 movl $0x80484f4,(%esp)
        80483e4: 89 44 24 14 mov %eax,0x14(%esp)
        80483e8: a1 34 96 04 08 mov 0x8049634,%eax
        80483ed: 89 44 24 10 mov %eax,0x10(%esp)
        80483f1: a1 30 96 04 08 mov 0x8049630,%eax
        80483f6: 89 44 24 0c mov %eax,0xc(%esp)
        80483fa: a1 2c 96 04 08 mov 0x804962c,%eax
        80483ff: 89 44 24 08 mov %eax,0x8(%esp)
        8048403: a1 28 96 04 08 mov 0x8049628,%eax
        8048408: 89 44 24 04 mov %eax,0x4(%esp)
        804840c: e8 af fe ff ff call 80482c0
        8048411: 83 05 3c 96 04 08 01 addl $0x1,0x804963c
        8048418: e9 74 ff ff ff jmp 8048391
        804841d: 90 nop
        804841e: 90 nop
        804841f: 90 nop

        08048420 :
        8048420: 55 push %ebp
        8048421: 89 e5 mov %esp,%ebp
        8048423: 5d pop %ebp
        8048424: c3 ret
        8048425: 8d 74 26 00 lea 0x0(%esi),%esi
        8048429: 8d bc 27 00 00 00 00 lea 0x0(%edi),%edi

        08048430 :
        8048430: 55 push %ebp
        8048431: 89 e5 mov %esp,%ebp
        8048433: 57 push %edi
        8048434: 56 push %esi
        8048435: 53 push %ebx
        8048436: e8 5e 00 00 00 call 8048499
        804843b: 81 c3 c9 11 00 00 add $0x11c9,%ebx
        8048441: 83 ec 1c sub $0x1c,%esp
        8048444: e8 2f fe ff ff call 8048278
        8048449: 8d 83 18 ff ff ff lea 0xffffff18(%ebx),%eax
        804844f: 89 45 f0 mov %eax,0xfffffff0(%ebp)
        8048452: 8d 83 18 ff ff ff lea 0xffffff18(%ebx),%eax
        8048458: 29 45 f0 sub %eax,0xfffffff0(%ebp)
        804845b: c1 7d f0 02 sarl $0x2,0xfffffff0(%ebp)
        804845f: 8b 55 f0 mov 0xfffffff0(%ebp),%edx
        8048462: 85 d2 test %edx,%edx
        8048464: 74 2b je 8048491
        8048466: 31 ff xor %edi,%edi
        8048468: 89 c6 mov %eax,%esi
        804846a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi
        8048470: 8b 45 10 mov 0x10(%ebp),%eax
        8048473: 83 c7 01 add $0x1,%edi
        8048476: 89 44 24 08 mov %eax,0x8(%esp)
        804847a: 8b 45 0c mov 0xc(%ebp),%eax
        804847d: 89 44 24 04 mov %eax,0x4(%esp)
        8048481: 8b 45 08 mov 0x8(%ebp),%eax
        8048484: 89 04 24 mov %eax,(%esp)
        8048487: ff 16 call *(%esi)
        8048489: 83 c6 04 add $0x4,%esi
        804848c: 39 7d f0 cmp %edi,0xfffffff0(%ebp)
        804848f: 75 df jne 8048470
        8048491: 83 c4 1c add $0x1c,%esp
        8048494: 5b pop %ebx
        8048495: 5e pop %esi
        8048496: 5f pop %edi
        8048497: 5d pop %ebp
        8048498: c3 ret

        08048499 :
        8048499: 8b 1c 24 mov (%esp),%ebx
        804849c: c3 ret
        804849d: 90 nop
        804849e: 90 nop
        804849f: 90 nop

        080484a0 :
        80484a0: 55 push %ebp
        80484a1: 89 e5 mov %esp,%ebp
        80484a3: 53 push %ebx
        80484a4: bb 1c 95 04 08 mov $0x804951c,%ebx
        80484a9: 83 ec 04 sub $0x4,%esp
        80484ac: a1 1c 95 04 08 mov 0x804951c,%eax
        80484b1: 83 f8 ff cmp $0xffffffff,%eax
        80484b4: 74 0c je 80484c2
        80484b6: 83 eb 04 sub $0x4,%ebx
        80484b9: ff d0 call *%eax
        80484bb: 8b 03 mov (%ebx),%eax
        80484bd: 83 f8 ff cmp $0xffffffff,%eax
        80484c0: 75 f4 jne 80484b6
        80484c2: 83 c4 04 add $0x4,%esp
        80484c5: 5b pop %ebx
        80484c6: 5d pop %ebp
        80484c7: c3 ret
        Disassembly of section .fini:

        080484c8 :
        80484c8: 55 push %ebp
        80484c9: 89 e5 mov %esp,%ebp
        80484cb: 53 push %ebx
        80484cc: 83 ec 04 sub $0x4,%esp
        80484cf: e8 00 00 00 00 call 80484d4
        80484d4: 5b pop %ebx
        80484d5: 81 c3 30 11 00 00 add $0x1130,%ebx
        80484db: e8 40 fe ff ff call 8048320
        80484e0: 59 pop %ecx
        80484e1: 5b pop %ebx
        80484e2: c9 leave
        80484e3: c3 ret


      • TRRY
        Fysikaalikko kirjoitti:

        Mikä parametri gcc:lle pitää antaa, jotta ne optimoinnit menee pois?

        Mikä on c-listaukseni yksinkertaisin monimutkaistus tai muutos, jotta kääntäjä ei normaaliparametreillä pääse tekemään mitä ei ole tarkoitettu?

        "
        "objdump -d a.out".
        "
        tulos:

        a.out: file format elf32-i386

        Disassembly of section .init:

        08048278 :
        8048278: 55 push %ebp
        8048279: 89 e5 mov %esp,%ebp
        804827b: 83 ec 08 sub $0x8,%esp
        804827e: e8 71 00 00 00 call 80482f4
        8048283: e8 c8 00 00 00 call 8048350
        8048288: e8 13 02 00 00 call 80484a0
        804828d: c9 leave
        804828e: c3 ret
        Disassembly of section .plt:

        08048290 :
        8048290: ff 35 08 96 04 08 pushl 0x8049608
        8048296: ff 25 0c 96 04 08 jmp *0x804960c
        804829c: 00 00 add %al,(%eax)
        ...

        080482a0 :
        80482a0: ff 25 10 96 04 08 jmp *0x8049610
        80482a6: 68 00 00 00 00 push $0x0
        80482ab: e9 e0 ff ff ff jmp 8048290

        080482b0 :
        80482b0: ff 25 14 96 04 08 jmp *0x8049614
        80482b6: 68 08 00 00 00 push $0x8
        80482bb: e9 d0 ff ff ff jmp 8048290

        080482c0 :
        80482c0: ff 25 18 96 04 08 jmp *0x8049618
        80482c6: 68 10 00 00 00 push $0x10
        80482cb: e9 c0 ff ff ff jmp 8048290
        Disassembly of section .text:

        080482d0 :
        80482d0: 31 ed xor %ebp,%ebp
        80482d2: 5e pop %esi
        80482d3: 89 e1 mov %esp,%ecx
        80482d5: 83 e4 f0 and $0xfffffff0,%esp
        80482d8: 50 push %eax
        80482d9: 54 push %esp
        80482da: 52 push %edx
        80482db: 68 20 84 04 08 push $0x8048420
        80482e0: 68 30 84 04 08 push $0x8048430
        80482e5: 51 push %ecx
        80482e6: 56 push %esi
        80482e7: 68 80 83 04 08 push $0x8048380
        80482ec: e8 bf ff ff ff call 80482b0
        80482f1: f4 hlt
        80482f2: 90 nop
        80482f3: 90 nop

        080482f4 :
        80482f4: 55 push %ebp
        80482f5: 89 e5 mov %esp,%ebp
        80482f7: 53 push %ebx
        80482f8: 83 ec 04 sub $0x4,%esp
        80482fb: e8 00 00 00 00 call 8048300
        8048300: 5b pop %ebx
        8048301: 81 c3 04 13 00 00 add $0x1304,%ebx
        8048307: 8b 93 fc ff ff ff mov 0xfffffffc(%ebx),%edx
        804830d: 85 d2 test %edx,%edx
        804830f: 74 05 je 8048316
        8048311: e8 8a ff ff ff call 80482a0
        8048316: 58 pop %eax
        8048317: 5b pop %ebx
        8048318: c9 leave
        8048319: c3 ret
        804831a: 90 nop
        804831b: 90 nop
        804831c: 90 nop
        804831d: 90 nop
        804831e: 90 nop
        804831f: 90 nop

        08048320 :
        8048320: 55 push %ebp
        8048321: 89 e5 mov %esp,%ebp
        8048323: 83 ec 08 sub $0x8,%esp
        8048326: 80 3d 40 96 04 08 00 cmpb $0x0,0x8049640
        804832d: 74 0c je 804833b
        804832f: eb 1c jmp 804834d
        8048331: 83 c0 04 add $0x4,%eax
        8048334: a3 24 96 04 08 mov %eax,0x8049624
        8048339: ff d2 call *%edx
        804833b: a1 24 96 04 08 mov 0x8049624,%eax
        8048340: 8b 10 mov (%eax),%edx
        8048342: 85 d2 test %edx,%edx
        8048344: 75 eb jne 8048331
        8048346: c6 05 40 96 04 08 01 movb $0x1,0x8049640
        804834d: c9 leave
        804834e: c3 ret
        804834f: 90 nop

        08048350 :
        8048350: 55 push %ebp
        8048351: 89 e5 mov %esp,%ebp
        8048353: 83 ec 08 sub $0x8,%esp
        8048356: a1 2c 95 04 08 mov 0x804952c,%eax
        804835b: 85 c0 test %eax,%eax
        804835d: 74 12 je 8048371
        804835f: b8 00 00 00 00 mov $0x0,%eax
        8048364: 85 c0 test %eax,%eax
        8048366: 74 09 je 8048371
        8048368: c7 04 24 2c 95 04 08 movl $0x804952c,(%esp)
        804836f: ff d0 call *%eax
        8048371: c9 leave
        8048372: c3 ret
        8048373: 90 nop
        8048374: 90 nop
        8048375: 90 nop
        8048376: 90 nop
        8048377: 90 nop
        8048378: 90 nop
        8048379: 90 nop
        804837a: 90 nop
        804837b: 90 nop
        804837c: 90 nop
        804837d: 90 nop
        804837e: 90 nop
        804837f: 90 nop

        08048380 :
        8048380: 8d 4c 24 04 lea 0x4(%esp),%ecx
        8048384: 83 e4 f0 and $0xfffffff0,%esp
        8048387: ff 71 fc pushl 0xfffffffc(%ecx)
        804838a: 55 push %ebp
        804838b: 89 e5 mov %esp,%ebp
        804838d: 51 push %ecx
        804838e: 83 ec 24 sub $0x24,%esp
        8048391: a1 3c 96 04 08 mov 0x804963c,%eax
        8048396: c7 05 28 96 04 08 f9 movl $0x7ffffff9,0x8049628
        804839d: ff ff 7f
        80483a0: c7 05 38 96 04 08 f9 movl $0x7ffffff9,0x8049638
        80483a7: ff ff 7f
        80483aa: c7 05 34 96 04 08 f9 movl $0x7ffffff9,0x8049634
        80483b1: ff ff 7f
        80483b4: c7 05 30 96 04 08 f9 movl $0x7ffffff9,0x8049630
        80483bb: ff ff 7f
        80483be: c7 05 2c 96 04 08 f9 movl $0x7ffffff9,0x804962c
        80483c5: ff ff 7f
        80483c8: 89 44 24 04 mov %eax,0x4(%esp)
        80483cc: c7 04 24 ec 84 04 08 movl $0x80484ec,(%esp)
        80483d3: e8 e8 fe ff ff call 80482c0
        80483d8: a1 38 96 04 08 mov 0x8049638,%eax
        80483dd: c7 04 24 f4 84 04 08 movl $0x80484f4,(%esp)
        80483e4: 89 44 24 14 mov %eax,0x14(%esp)
        80483e8: a1 34 96 04 08 mov 0x8049634,%eax
        80483ed: 89 44 24 10 mov %eax,0x10(%esp)
        80483f1: a1 30 96 04 08 mov 0x8049630,%eax
        80483f6: 89 44 24 0c mov %eax,0xc(%esp)
        80483fa: a1 2c 96 04 08 mov 0x804962c,%eax
        80483ff: 89 44 24 08 mov %eax,0x8(%esp)
        8048403: a1 28 96 04 08 mov 0x8049628,%eax
        8048408: 89 44 24 04 mov %eax,0x4(%esp)
        804840c: e8 af fe ff ff call 80482c0
        8048411: 83 05 3c 96 04 08 01 addl $0x1,0x804963c
        8048418: e9 74 ff ff ff jmp 8048391
        804841d: 90 nop
        804841e: 90 nop
        804841f: 90 nop

        08048420 :
        8048420: 55 push %ebp
        8048421: 89 e5 mov %esp,%ebp
        8048423: 5d pop %ebp
        8048424: c3 ret
        8048425: 8d 74 26 00 lea 0x0(%esi),%esi
        8048429: 8d bc 27 00 00 00 00 lea 0x0(%edi),%edi

        08048430 :
        8048430: 55 push %ebp
        8048431: 89 e5 mov %esp,%ebp
        8048433: 57 push %edi
        8048434: 56 push %esi
        8048435: 53 push %ebx
        8048436: e8 5e 00 00 00 call 8048499
        804843b: 81 c3 c9 11 00 00 add $0x11c9,%ebx
        8048441: 83 ec 1c sub $0x1c,%esp
        8048444: e8 2f fe ff ff call 8048278
        8048449: 8d 83 18 ff ff ff lea 0xffffff18(%ebx),%eax
        804844f: 89 45 f0 mov %eax,0xfffffff0(%ebp)
        8048452: 8d 83 18 ff ff ff lea 0xffffff18(%ebx),%eax
        8048458: 29 45 f0 sub %eax,0xfffffff0(%ebp)
        804845b: c1 7d f0 02 sarl $0x2,0xfffffff0(%ebp)
        804845f: 8b 55 f0 mov 0xfffffff0(%ebp),%edx
        8048462: 85 d2 test %edx,%edx
        8048464: 74 2b je 8048491
        8048466: 31 ff xor %edi,%edi
        8048468: 89 c6 mov %eax,%esi
        804846a: 8d b6 00 00 00 00 lea 0x0(%esi),%esi
        8048470: 8b 45 10 mov 0x10(%ebp),%eax
        8048473: 83 c7 01 add $0x1,%edi
        8048476: 89 44 24 08 mov %eax,0x8(%esp)
        804847a: 8b 45 0c mov 0xc(%ebp),%eax
        804847d: 89 44 24 04 mov %eax,0x4(%esp)
        8048481: 8b 45 08 mov 0x8(%ebp),%eax
        8048484: 89 04 24 mov %eax,(%esp)
        8048487: ff 16 call *(%esi)
        8048489: 83 c6 04 add $0x4,%esi
        804848c: 39 7d f0 cmp %edi,0xfffffff0(%ebp)
        804848f: 75 df jne 8048470
        8048491: 83 c4 1c add $0x1c,%esp
        8048494: 5b pop %ebx
        8048495: 5e pop %esi
        8048496: 5f pop %edi
        8048497: 5d pop %ebp
        8048498: c3 ret

        08048499 :
        8048499: 8b 1c 24 mov (%esp),%ebx
        804849c: c3 ret
        804849d: 90 nop
        804849e: 90 nop
        804849f: 90 nop

        080484a0 :
        80484a0: 55 push %ebp
        80484a1: 89 e5 mov %esp,%ebp
        80484a3: 53 push %ebx
        80484a4: bb 1c 95 04 08 mov $0x804951c,%ebx
        80484a9: 83 ec 04 sub $0x4,%esp
        80484ac: a1 1c 95 04 08 mov 0x804951c,%eax
        80484b1: 83 f8 ff cmp $0xffffffff,%eax
        80484b4: 74 0c je 80484c2
        80484b6: 83 eb 04 sub $0x4,%ebx
        80484b9: ff d0 call *%eax
        80484bb: 8b 03 mov (%ebx),%eax
        80484bd: 83 f8 ff cmp $0xffffffff,%eax
        80484c0: 75 f4 jne 80484b6
        80484c2: 83 c4 04 add $0x4,%esp
        80484c5: 5b pop %ebx
        80484c6: 5d pop %ebp
        80484c7: c3 ret
        Disassembly of section .fini:

        080484c8 :
        80484c8: 55 push %ebp
        80484c9: 89 e5 mov %esp,%ebp
        80484cb: 53 push %ebx
        80484cc: 83 ec 04 sub $0x4,%esp
        80484cf: e8 00 00 00 00 call 80484d4
        80484d4: 5b pop %ebx
        80484d5: 81 c3 30 11 00 00 add $0x1130,%ebx
        80484db: e8 40 fe ff ff call 8048320
        80484e0: 59 pop %ecx
        80484e1: 5b pop %ebx
        80484e2: c9 leave
        80484e3: c3 ret

        gcc:stä saa optimoinnit saa pois päältä vivulla -O0 (eli iso oo ja nolla). man-sivun mukaan tämän pitäisi olla oletusarvo, mutta lähettämästäsi koodista for-silmukka oli optimoitu pois.

        Toinen hyödyllinen juttu tällaisia testejä tehdessä on avainsana "volatile". Jos määrittelet muuttujat näin:

        volatile unsigned int a=1;
        volatile unsigned int b=1;
        volatile unsigned int c=1;
        volatile unsigned int d=1;

        kerrot samalla kääntäjälle, että jokainen näihin muuttujiin tehty kirjoitus- ja lukuoperaatio pitää ihan oikeasti tehdä muistiin/muistista --- niitä ei saa optimoida pois, eikä myöskään tehdä vain prosessorin rekistereistä kirjoittaen/lukien.


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Aivosyöpää sairastava Olga Temonen TV:ssä - Viimeinen Perjantai-keskusteluohjelma ulos

      Näyttelijä-yrittäjä Olga Temonen sairastaa neljännen asteen glioomaa eli aivosyöpää, jota ei ole mahdollista leikata. Hä
      Maailman menoa
      91
      2910
    2. Pelotelkaa niin paljon kuin sielu sietää.

      Mutta ei mene perille asti. Miksi Venäjä hyökkäisi Suomeen? No, tottahan se tietenkin on jos Suomi joka ei ole edes soda
      Maailman menoa
      299
      1686
    3. Mikä saa ihmisen tekemään tällaista?

      Onko se huomatuksi tulemisen tarve tosiaan niin iso tarve, että nuoruuttaan ja tietämättömyyttään pilataan loppuelämä?
      Sinkut
      246
      1557
    4. Minkä merkkisellä

      Autolla kaivattusi ajaa? Mies jota kaipaan ajaa Mersulla.
      Ikävä
      87
      1391
    5. IL - VARUSMIEHIÄ lähetetään jatkossa NATO-tehtäviin ulkomaille!

      Suomen puolustuksen uudet linjaukset: Varusmiehiä suunnitellaan Nato-tehtäviin Puolustusministeri Antti Häkkänen esittel
      Maailman menoa
      402
      1384
    6. Nyt kun Pride on ohi 3.0

      Edelliset kaksi ketjua tuli täyteen. Pidetään siis edelleen tämä asia esillä. Raamattu opettaa johdonmukaisesti, että
      Luterilaisuus
      400
      1307
    7. Kiitos nainen

      Kuitenkin. Olet sitten ajanmerkkinä. Tuskin enää sinua näen ja huomasitko, että olit siinä viimeisen kerran samassa paik
      Tunteet
      2
      1089
    8. Esko Eerikäinen tatuoi kasvoihinsa rakkaan nimen - Kärkäs kommentti "Ritvasta" lävähti somessa

      Ohhoh! Esko Eerikäinen on ottanut uuden tatuoinnin. Kyseessä ei ole mikä tahansa kuva minne tahansa, vaan Eerikäisen tat
      Suomalaiset julkkikset
      38
      1037
    9. Hyväksytkö sinä sen että päättäjämme ei rakenna rauhaa Venäjän kanssa?

      Vielä kun sota ehkäpä voitaisiin välttää rauhanponnisteluilla niin millä verukkeella voidaan sanoa että on hyvä asia kun
      Maailman menoa
      329
      874
    10. Miksi Purra-graffiti ei nyt olekkaan naisvihaa?

      "Pohtikaapa reaktiota, jos vastaava graffiti olisi tehty Sanna Marinista", kysyy Tere Sammallahti. Helsingin Suvilahden
      Maailman menoa
      257
      855
    Aihe