memcpy vs oppgave i C

stemmer
23

Under hvilke omstendigheter kan jeg forvente memcpys å utkonkurrere oppdrag på moderne Intel / AMD maskinvare? Jeg bruker GCC 4.2.x på en 32 bits Intel-plattformen (men er interessert i 64 bit i tillegg).

Publisert på 27/11/2008 klokken 15:17
kilden bruker
På andre språk...                            


1 svar

stemmer
34

Du bør aldri forvente at de utkonkurrere oppdrag. Årsaken er, kompilatoren vil bruke memcpy likevel når den mener det ville være raskere (hvis du bruker optimalisere flagg). Hvis ikke, og hvis strukturen er rimelig liten at den passer inn i registrene, direkte register manipulasjon kan brukes som ikke ville kreve noen minnetilgang i det hele tatt.

GCC har spesielle blokk-move mønstre internt at regne ut når man skal forandre på registre / minneceller, eller når man skal bruke den memcpy funksjon. Merk når du tilordner struct, vet kompilatoren ved kompilering hvor stor farten kommer til å være, så det kan rulle små kopier (gjøre et trekk n ganger i rad i stedet for looping) for eksempel. Merk -mno-memcpy:

-mmemcpy
-mno-memcpy
    Force (do not force) the use of "memcpy()" for non-trivial block moves.  
    The default is -mno-memcpy, which allows GCC to inline most constant-sized copies.

Hvem vet det bedre når du skal bruke memcpy enn kompilatoren selv?

Svarte 27/11/2008 kl. 15:24
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more