Здравствуйте, ArtDenis, Вы писали:
AD>Здравствуйте, Шахтер, Вы писали:
Ш>>...Нет. Цикл выполнит последовательность присваиваний
Ш>>Ш>>dst[0] = src[0] ;
Ш>>dst[1] = src[1] ;
Ш>>dst[2] = src[2] ;
Ш>>dst[3] = src[3] ;
Ш>>...
Ш>>dst[size-1] = src[size-1] ;
Ш>>
Ш>>Что сделает memcpy -- всё что угодно, вплоть до форматирования винчестера. ...
AD>С этим я, пожалуй, соглашусь
AD>Но с другой стороны: vc оптимизирует цикл и memcpy в одинаковый код...
Разве?
; 11 : char mem[10]={'a','b'};
mov al, 97 ; 00000061H
push esi
xor edx, edx
mov DWORD PTR _mem$[esp+18], edx
mov cl, 98 ; 00000062H
mov DWORD PTR _mem$[esp+22], edx
push edi
mov BYTE PTR _mem$[esp+20], al
; 12 :
; 13 : char *dst=mem+2;
; 14 : const char *src=mem;
; 15 : size_t size=8;
; 16 :
; 17 : #if 1
; 18 :
; 19 : for(size_t i=0; i<size ;i++) dst[i]=src[i];
mov BYTE PTR _mem$[esp+22], al
mov BYTE PTR _mem$[esp+24], al
mov BYTE PTR _mem$[esp+26], al
mov BYTE PTR _mem$[esp+28], al
; 20 :
; 21 : #else
; 22 :
; 23 : memcpy(dst,src,size);
; 24 :
; 25 : #endif
; 26 :
; 27 : cout.write(mem,10) << endl ;
push 10 ; 0000000aH
lea eax, DWORD PTR _mem$[esp+24]
mov BYTE PTR _mem$[esp+25], cl
mov BYTE PTR _mem$[esp+27], cl
mov BYTE PTR _mem$[esp+29], cl
mov BYTE PTR _mem$[esp+31], cl
mov BYTE PTR _mem$[esp+33], cl
; 11 : char mem[10]={'a','b'};
xor eax, eax
mov DWORD PTR _mem$[esp+14], eax
push esi
mov BYTE PTR _mem$[esp+16], 97 ; 00000061H
mov BYTE PTR _mem$[esp+17], 98 ; 00000062H
; 12 :
; 13 : char *dst=mem+2;
; 14 : const char *src=mem;
; 15 : size_t size=8;
; 16 :
; 17 : #if 0
; 18 :
; 19 : for(size_t i=0; i<size ;i++) dst[i]=src[i];
; 20 :
; 21 : #else
; 22 :
; 23 : memcpy(dst,src,size);
mov ecx, DWORD PTR _mem$[esp+16]
mov DWORD PTR _mem$[esp+22], eax
mov DWORD PTR _mem$[esp+18], ecx
mov edx, DWORD PTR _mem$[esp+20]
; 24 :
; 25 : #endif
; 26 :
; 27 : cout.write(mem,10) << endl ;
push 10 ; 0000000aH
lea eax, DWORD PTR _mem$[esp+20]
push eax
mov ecx, OFFSET FLAT:?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A
mov DWORD PTR _mem$[esp+30], edx
... << RSDN@Home 1.1.3 stable >>