C:我如何通过ref或值来决定是否传递params?
作者:互联网
使用C我如何决定是否应该通过值或引用/指针传递参数? (告诉我32位和64位的答案)让我们看看A.是否有2个32位值更少或相等,可以作为指向32位值的指针?
B对我来说似乎总是应该通过价值.我认为我应该通过价值,但有人告诉我(但我没有看到证据)处理器不处理值而不是他们的比特,所以它是更多的工作.因此,如果我传递它们将是更多的工作来传递值因此byref更快?最后我扔了一个枚举.我认为枚举应始终是有价值的
注意:当我用ref表示我指的是const引用或指针(不能忘记const …)
struct A { int a, b; }
struct B { int a; }
struct C { char a, b; }
enum D { a,b,c }
void fn(T a);
现在告诉我答案,如果我多次推动参数并且代码不使用尾调用? (假设这些值不会被使用,直到4个左右调用深)
解决方法:
忘记堆栈大小.如果要更改它,则应通过引用传递,否则应按值传递.
通过允许函数意外地更改数据来防止引入的错误比浪费的几个字节的堆栈空间重要得多.
如果堆栈空间成为问题,请停止使用这么多级别(例如使用迭代解决方案替换递归解决方案)或扩展堆栈.除非你的结构庞大或你在嵌入式世界中运行,否则四级递归通常并不繁重.
如果性能成为一个问题,找到一个更快的算法:-)如果那是不可能的,那么你可以看看通过引用传递,但你需要了解它打破了调用者和被调用者之间的契约.如果你能忍受,那没关系.我一般不能:-)
值/引用二分法的目的是控制在语言级别作为参数传递的事物发生的事情,而不是控制语言实现的工作方式.
标签:c,performance,struct,pass-by-reference,pass-by-value 来源: https://codeday.me/bug/20191007/1865891.html