memcpy vs C中的赋值

在什么情况下我应该期望memcpys在现代INTEL / AMD硬件上的性能优于其他? 我在32位Intel平台上使用GCC 4.2.x(但我也对64位感兴趣)。

你永远不应该指望他们胜过任务。 原因是,当编译器认为它更快时(如果使用优化标志),编译器将使用memcpy。 如果不是,并且如果结构合理小,它适合寄存器,则可以使用直接寄存器操作,根本不需要任何存储器访问。

GCC内部有特殊的块移动模式,可以确定何时直接更改寄存器/存储单元,或何时使用memcpyfunction。 注意在分配结构时,编译器在编译时知道移动的大小,因此它可以展开小型副本(例如,在行中移动n次而不是循环)。 注意-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. 

谁知道何时使用memcpy比编译器本身更好?