在我应该期待memcpys什么情况下对现代INTEL / AMD硬件跑赢分配?我使用的是32位Intel平台上GCC 4.2.x版(但很感兴趣的64位以及)。

有帮助吗?

解决方案

您永远不应该期望他们跑赢分配。原因是,当它认为它会更快,编译器将使用memcpy的(如果你使用优化标志)。如果不是,并且如果该结构是合理小,它配合到寄存器,直接操纵寄存器可以使用其中将不需要任何存储器访问的。

GCC具有特殊的块移动图案内部的是找出当直接改变寄存器/存储器单元,或当使用memcpy函数。注意当分配结构,编译器知道在编译时,此举有多大将是,所以它可以展开小型副本(做一个移动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比编译器本身?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top