的memcpy VS用C分配
-
11-07-2019 - |
题
在我应该期待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比编译器本身?
不隶属于 StackOverflow