【问题标题】:Pass by const pointer vs. pass by value for built in types. Efficiency通过 const 指针传递与通过值传递内置类型。效率
【发布时间】:2013-11-10 18:02:41
【问题描述】:

当我试图找到答案时,我几乎只找到 C++ 帖子而不是 C。

对于 int、char 等内置类型,按值传递和通过 const 指针传递是否有任何性能差异?

在按值传递时使用 const 关键字仍然是一种好的编程习惯吗?

int PassByValue(int value)
{
    return value / 2;
}

int ConstPointer(const int * value)
{
    return (*value) / 2;
}

【问题讨论】:

  • 第二个调用更烦人(需要f(&x)而不是f(x),如果要传递常量值,请引入额外的局部变量-f(5)不起作用)。
  • @delnan 提到的两个问题都在 c++ 中通过使用 references 一个 c 中不存在的概念来解决。
  • @dmckee:我知道,但这是一个 C 问题。

标签: c pointers reference constants


【解决方案1】:

只要值小于或等于指针的大小 (sizeof),通过 const 指针传递永远不会比通过值快。它也更烦人,有时甚至是错误的(堆栈变量)。

【讨论】:

  • 我怀疑 const 指针对于内置类型可能会更慢的原因是因为指针的大小可能大于,例如字符(至少)。因此,您的答案被标记为已接受的答案,因为您还包括了原因,而不仅仅是是/否。
【解决方案2】:

一般而言,按值传递应该更快。事实上,该值可能已经在寄存器中,在这种情况下,就不需要访问缓存了。但是,如果函数代码与调用者代码一起编译,编译器可能无论如何都会优化。

【讨论】:

    【解决方案3】:

    通过指针传递 int、char 等内置类型不会带来更好的性能结果。

    使用 const 关键字传递值无关紧要,因为原始值不会改变。

    【讨论】:

      猜你喜欢
      • 2021-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-28
      • 1970-01-01
      • 2019-09-16
      • 2013-07-27
      • 1970-01-01
      相关资源
      最近更新 更多