加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

函数参数或局部变量

发布时间:2020-12-16 03:07:32 所属栏目:百科 来源:网络整理
导读:假设我有一个重复数百万次的循环.在这个循环里面我有一个函数调用. 在这个函数的内部,我需要在一开始就创建一些临时变量.现在,哪一个更好: a)在代码开头创建临时变量,在循环开始时初始化变量,并将其作为参数传递 b)在被调用函数的开头创建刚刚的本地临时变
假设我有一个重复数百万次的循环.在这个循环里面我有一个函数调用.

在这个函数的内部,我需要在一开始就创建一些临时变量.现在,哪一个更好:

a)在代码开头创建临时变量,在循环开始时初始化变量,并将其作为参数传递
b)在被调用函数的开头创建刚刚的本地临时变量?

这是一个问题吗?我想知道哪一点被认为是更好的做法,哪一个更快.

解决方法

我们为some_function()抛出一些可能的定义,这个函数将从你的循环中调用.
// Method 1
void some_function() {
    int temporary;

    // Use temporary
}

// Method 2
void some_function(int temporary) {
    // Use temporary
}

// Method 3
void some_function(int *temporary) {
    // Use *temporary
}

方法1可能是这些选项中最可读的,所以这是我喜欢的,除非你有一个很好的理由去做别的事情.除了您的编译器正在调用函数之外,它还可能比其他任何一个都要快.如果是这样,那么所有三个都可能执行完全相同(如果编译器无法优化远程指针取消引用,方法3可能会更慢).

如果编译器没有内联,那么方法2可能比方法1慢.这是因为在堆栈分配的内存方面,它们是相同的 – 函数参数将以相同的方式存储在堆栈中当地人在这个上下文中,函数参数和本地的唯一区别是函数参数可以被调用者赋予一个值.将调用者的值传递给函数的这一步(理论上讲)会减慢调用速度.

方法3几乎肯定会变慢,因为对临时内存的访问将包含间接级别.与访问本地时相比,引用一个指针不是一个便宜的操作.

当然,如果表现绝对关键,那么你应该对这些方法进行基准测试.我怀疑方法1将变成最快(或至少不比其他的慢),并且另外似乎对我更可读.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读