指向struct或struct本身的指针?

时间:2012-10-16 19:06:40

标签: c performance pointers struct

考虑以下代码:

struct s { /* ... */ };

void f(struct s x) { /* ... */) /* (1) */
/* or */
void f(const struct s *x) { /* ... */ } /* (2) */

struct s具有合适的尺寸时,在哪种情况下我们应该更喜欢第一种形式?

3 个答案:

答案 0 :(得分:5)

你问哪个更好?

这取决于你想要做什么 - 带指针的第二种形式会更有效率。但是,如果您只想将值传递给f而不必担心副作用,那么您可以使用第一个签名 - 只要struct不是太大。

答案 1 :(得分:3)

我建议阅读this

如果struct s的大小合适,那么你应该避免按值传递它,特别是在递归函数中。

按值传递结构意味着它在函数调用之前被复制。这导致执行速度变慢,内存利用率更高。另请注意,struct将在堆栈中进行分配,在某些系统中,堆栈大小非常有限。

我建议在每种情况下使用指针,除非您需要通过函数修改结构的多个副本,并且您不希望这些修改仅在每个函数的范围内可见。

答案 2 :(得分:-1)

当您希望f获取x的副本而不是const指针x时,请首选表单。