Արդյո՞ք արագության տարբերություն կա C / C ++- ում գտնվող տեղակայված, միևնույն ժամանակ, ժամանակի և մինչդեռ հանգույցների միջև:


պատասխանել 1:
int main (int argc, char * argv []) {int i, g = 0xf; համար (i = 0; i <16; i ++) G--; }
int main (int argc, char * argv []) {int i = 0, g = 0xf; անել {G--; ես ++; } մինչդեռ (i <16); }
int main (int argc, char * argv []) {int i = 0, g = 0xf; մինչդեռ (i <16) {G--; ես ++; ; }
.file "main_for.c" .Text .globl main .type main, @function Main: .LFB0: .cfi_startproc pushq% rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq% rsp,% rbp .cfi_def_cfa_register 6 mov -20 (% rbp) movq% rsi, -32 (% rbp) <--- Ամեն ինչի մասին դա programinit movl $ 15, -8 (% rbp) <- Մեր փոփոխական g movl $ 0, -4 (% rbp) < - Մեր փոփոխական i jmp .L2 .L3: subl $ 1, -8 (% rbp) <--- իջեցում g addl $ 1, -4 (% rbp) <--- հավելում i .L2: cmpl $ 15, - 4 (% rbp) <--- համեմատեք i- ը 15 jle- ի հետ .L3 <---- ցատկել հաջորդ iteration- ով, եթե պակաս կամ հավասար է popq% rbp <----- Ստորև բերված ամեն ինչ ծրագրի մաքրում է: cfi_def_cfa 7, 8 ret .cfi_endproc .LFE0:. չափի հիմնական, .- հիմնական .ident GCC. (Gentoo 4.7.3-r1 p1.4, pie-0.5.5) 4.7.3 .section .note.GNU-stack, "", @ progbits
movl $ 0, -4 (% rbp) <- Մեր փոփոխական i Movl $ 15, -8 (% rbp) <- Մեր փոփոխական g jmp .L2 .L3. subl $ 1, -8 (% rbp) <--- Decrement g addl $ 1, -4 (% rbp) <--- հավելում i .L2: cmpl $ 15, -4 (% rbp) <--- համեմատեք i- ը 15 jle .L3 <---- ցատկել հաջորդին Iteration, եթե պակաս կամ հավասար է դրան
movl $ 0, -4 (% rbp) Movl $ 15, -8 (% Rbp) .L2: subl $ 1, -8 (% rbp) addl $ 1, -4 (% rbp) cmpl $ 15, -4 ( % rbp) jle .L2
.file "main_for.c" .section .text.startup, "ax", @ progbits .p2align 4, 15, 15 .globl main .type main, @function Main: .LFB0: չափի հիմնական, .- հիմնական .ident GCC. (Gentoo 4.7.3-r1 p1.4, pie-0.5.5) 4.7.3 .section .note.GNU-stack, "", @ progbits
Հիմնական ՝ .LFB0: .cfi_startproc movl $ 15, -4 (% rsp) <----- Հաշվարկված վերջնական պայման i (cecI) movl $ 16,% eax <------- Մեր փոփոխական g- ը գրանցամատյանում .p2align 4,, 10 .p2align 3 .L2` movl -4 (% rsp),% edx <---- տեղափոխել cecI գրանցումը subl $ 1,% edx <--- իջեցում cecI subl $ 1,% eax <- - իջեցում g գրանցումով movl% edx, -4 (% rsp) <- գրանցումը տեղափոխել cecI jne .L2 rep ret
.LFB0: .cfi_startproc Movl $ 15, -4 (% rsp) movl $ 16,% eax .p2align 4,, 10 .p2align 3 .L2: movl -4 (% rsp),% edx subl $ 1,% edx subl $ 1,% eax movl% edx, -4 (% rsp) jne .L2
int main (int argc, char * argv []) {int x, y; անկայուն g = 0xf; համար (y = 0; y <16; y ++) {for (x = 0; x <10; x ++) {G--; }}
int main (int argc, char * argv []) {int x, y = 0; ցնդող int g = 0xf; համար (y = 0; y <16; y ++, x = 0) {մինչդեռ (x ++ <10) {G--; }}
Հիմնական ՝ .LFB0: .L3` movl -4 (% rsp),% edx subl $ 1,% edx subl $ 1,% eax movl% edx, -4 (% rsp) jne .L3 subl $ 1,% ecx jne .L2