Игорь Пашев -

Dec. 3rd, 2010

03:56 pm

Previous Entry Add to Memories Tell A Friend Next Entry

Q: Как быстрее в Си++ обнулится переменная:
A = 0; или A ^= A; ?


A: while ( (A=rand()) != 0 );


// http://otvety.google.ru/otvety/thread?tid=1d16b9f18492a542

Tags: ,
(4 комментария | Оставить комментарий)

Comments:

[User Picture]
From:[info]mao
Date:December 3rd, 2010 - 08:21 pm
(Link)
пруфы в студию
(Reply to this)
[User Picture]
From:[info]ketmar
Date:December 5th, 2010 - 04:50 am
(Link)
а вот к стати, есть такая штука, которая называется точное программирование.

это значит, что компилятор при обработке базовых команд, будет выдавать именно ассемблерный аналог, а не "умную аптимизацию". это используется при компиляции linux.

а в данном случае A ^= A (xor) считается быстрее


заповедник непуганых кретинов.
(Reply to this) (Thread)
[User Picture]
From:[info]igorpashev
Date:December 5th, 2010 - 10:29 am
(Link)
1. A^=A не будет быстрее, если A - не регистр. 
Это вообще невозможно напрямую.

#include <stdlib.h>
int main ( int argc, char *argv[] )
{
   int A = 835438;
   int B = 823528;

   A = 0;
   B ^= B;
   return EXIT_SUCCESS;
}

gcc -save-temps a.c -o a

.file "a.c"
.text
.globl main
.type main, @function
main:
pushl %ebp
movl %esp, %ebp
subl $16, %esp
movl $835438, -8(%ebp)
movl $823528, -4(%ebp)
movl $0, -8(%ebp)
movl $0, -4(%ebp)
movl $0, %eax
leave
ret
.size main, .-main
.ident "GCC: (GNU) 4.4.4"
.section .note.GNU-stack,"",@progbits
(Reply to this) (Parent) (Thread)
[User Picture]
From:[info]ketmar
Date:December 5th, 2010 - 03:29 pm
(Link)
угу. а при -Oчто-то компилятор сам догадается нужное подставить.
(Reply to this) (Parent)