C/C++如何复制结构?

gex*_*ide 4 c c++ struct copy

在按值传递C/C++中的结构时,必须复制结构内容.编译器如何实现这一目标?即,通常为此副本发出哪些汇编指令?

这些时间有多快,例如与memcpy的调用相比?

现在考虑这段代码:

struct X { int i, j, k; };

void foo(X x);

void foo( int i, int j, int k);
Run Code Online (Sandbox Code Playgroud)

调用foo(X)和foo(int,int,int)之间有什么区别,或者生成的汇编代码是否相同(考虑参数的传递)?

Alo*_*ave 5

在C++中

编译器如何实现这一目标?

他们为该类/结构调用复制构造函数.如果您不提供一个或您提供的那个,则隐式生成一个.

这些时间有多快,例如与呼叫相比memcpy

取决于班级及其成员.分析应该给你一个更清晰的画面.
但是,memcpy应避免使用复制类实例.

在C.

编译器如何实现这一目标?

他们为该结构执行浅拷贝.出于所有实际目的,您可以将其视为相同memcpy.

  • @gexicide然而编译器认为在特定情况下适合.虽然,对于例如一堆`int`s来说,使用一般的`memcpy`是非常愚蠢的,并且你可以(通常)假设你的编译器不是那么愚蠢. (2认同)