memcpy 与 C 中的赋值

问题描述 投票:0回答:1

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

c struct variable-assignment memcpy
1个回答
44
投票

你永远不应该指望他们能胜过作业。原因是,当编译器认为它会更快时(如果您使用优化标志),编译器无论如何都会使用

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

© www.soinside.com 2019 - 2024. All rights reserved.