gpt4 book ai didi

C函数参数优化: (MyStruct const * const myStruct) vs.(MyStruct const myStruct)

转载 作者:太空宇宙 更新时间:2023-11-04 07:31:29 26 4
gpt4 key购买 nike

示例位于 ideone.com :

int passByConstPointerConst(MyStruct const * const myStruct)
int passByValueConst (MyStruct const myStruct)

您是否希望编译器优化上述两个函数,使它们都不会实际复制传递的 MyStruct 的内容?

我确实理解许多优化问题是特定于各个编译器和优化设置的,但我不能针对单个编译器进行设计。相反,我想对是否需要传递指针以避免复制有一个普遍的期望。似乎使用 const 并允许编译器处理优化(在我配置它之后)应该是更好的选择,并且会产生更易读且更不容易出错的代码。

ideone.com 的例子中,编译器显然仍在将数据复制到新位置。

最佳答案

在第一种情况下(将 const 指针传递给 const)不会发生复制。

在第二种情况下,确实发生了复制,我不会期望它被优化,如果没有其他原因,因为对象的地址被获取,然后通过省略号传递给函数从编译器的角度来看,谁知道该函数对该指针做了什么?

更一般地说,我不认为将按值调用更改为按引用调用是编译器所做的事情。如果你想通过引用复制,请自己实现。

从理论上讲,编译器是否可以检测到它可以将函数转换为按引用传递?是的; C 标准中没有任何内容说它不能..

你为什么要担心这个?如果您关心性能,分析是否显示按值复制是您软件中的一个重要瓶颈?

关于C函数参数优化: (MyStruct const * const myStruct) vs.(MyStruct const myStruct),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13421218/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com