将const指针传递给struct vs按值传递

时间:2013-07-08 15:53:35

标签: c performance pointers struct coding-style

建议使用什么,将结构作为指针传递给const,即


int doCalculations(const MyStruct* my_struct);

或按值传递struct,如


int doCalculations(MyStruct my_struct);

为什么?

在C ++中,我记得在const / struct有一个非平凡的构造函数时,应该使用传递Class的引用。在C中虽然没有构造函数,但我想仍然需要一些时间来制作struct的本地副本。

2 个答案:

答案 0 :(得分:3)

如果您打算修改结构,那么显然必须通过指针传递它。

如果您不打算修改结构,那么通常的做法是通过指针传递以避免不必要的复制。指针将占用sizeof(void *)内存,但可以通过寄存器传递(因此根本不使用堆栈内存)。

按值传递struct几乎总是会在堆栈上复制它。

您必须选择的两种情况:

  • 如果您的结构可能被外力修改(即它有volatile)字段,那么您可能希望通过指针传递它,以便始终拥有最新版本。
  • 如果您的结构在执行函数期间可能不再存在(例如另一个线程free那个内存),那么您显然必须复制它(按值传递)。

答案 1 :(得分:0)

建议按值传递结构有两个原因:

  

1)。将结构内容复制到新内容所花费的时间   临时变量。

     

2)。浪费的堆栈空间量,特别是如果   结构很大。

因此,使用指向const的指针是一个更可行的选择。