草庐IT

OPTIMIZATION

全部标签

c++ - 编译器是否优化了按值传递的函数参数?

假设我有一个函数,其中参数通过值而不是const引用传递。此外,我们假设函数内部只使用了值,即函数不会尝试修改它。在这种情况下,编译器是否能够确定它可以通过const-reference传递值(出于性能原因)并相应地生成代码?有没有编译器可以做到这一点? 最佳答案 如果你传递一个变量而不是一个临时变量,如果它的复制构造函数做了任何你在运行程序时会注意到的事情(“可观察行为”:输入/输出,或改变volatile变量)。除此之外,编译器可以自由地做它想做的一切(它只需要类似于它根本不会优化的可观察行为好像)。仅当参数是右值(大多数是临时

c++ - 编译器是否优化了按值传递的函数参数?

假设我有一个函数,其中参数通过值而不是const引用传递。此外,我们假设函数内部只使用了值,即函数不会尝试修改它。在这种情况下,编译器是否能够确定它可以通过const-reference传递值(出于性能原因)并相应地生成代码?有没有编译器可以做到这一点? 最佳答案 如果你传递一个变量而不是一个临时变量,如果它的复制构造函数做了任何你在运行程序时会注意到的事情(“可观察行为”:输入/输出,或改变volatile变量)。除此之外,编译器可以自由地做它想做的一切(它只需要类似于它根本不会优化的可观察行为好像)。仅当参数是右值(大多数是临时

c++ - 函数后的 const 如何优化程序?

我见过一些这样的方法:voidSomeClass::someMethod()const;这个const声明有什么作用,它如何帮助优化程序?编辑我看到这个问题的第一部分之前已经问过......但是,它仍然没有回答第二部分:这将如何优化程序? 最佳答案 如果编译器知道类实例的字段没有在const成员函数调用中被修改,它就不必重新加载它在const函数调用之前可能保存在寄存器中的任何字段。这有点像discussiononconst_cast中的C++常见问题解答。. 关于c++-函数后的con

c++ - 函数后的 const 如何优化程序?

我见过一些这样的方法:voidSomeClass::someMethod()const;这个const声明有什么作用,它如何帮助优化程序?编辑我看到这个问题的第一部分之前已经问过......但是,它仍然没有回答第二部分:这将如何优化程序? 最佳答案 如果编译器知道类实例的字段没有在const成员函数调用中被修改,它就不必重新加载它在const函数调用之前可能保存在寄存器中的任何字段。这有点像discussiononconst_cast中的C++常见问题解答。. 关于c++-函数后的con

c++ - 编译器何时内联 C++ 代码?

在C++中,方法是否仅在显式声明inline(或在头文件中定义)时才被内联,还是允许编译器在他们认为合适的情况下内联方法? 最佳答案 inline关键字实际上只是告诉链接器(或告诉编译器告诉链接器)同一函数的多个相同定义不是错误。如果要在header中定义函数,则需要它,或者如果header包含在多个编译单元中,则链接器会出现“多重定义”错误。选择inline作为关键字的理由似乎是人们想要在header中定义(非模板)函数的唯一原因是它可以被编译器内联.编译器不能内联函数调用,除非它具有完整的定义。如果函数没有在头文件中定义,编译器

c++ - 编译器何时内联 C++ 代码?

在C++中,方法是否仅在显式声明inline(或在头文件中定义)时才被内联,还是允许编译器在他们认为合适的情况下内联方法? 最佳答案 inline关键字实际上只是告诉链接器(或告诉编译器告诉链接器)同一函数的多个相同定义不是错误。如果要在header中定义函数,则需要它,或者如果header包含在多个编译单元中,则链接器会出现“多重定义”错误。选择inline作为关键字的理由似乎是人们想要在header中定义(非模板)函数的唯一原因是它可以被编译器内联.编译器不能内联函数调用,除非它具有完整的定义。如果函数没有在头文件中定义,编译器

c++ - 检查 vector 是否已排序的最佳算法

检查std::vector的最佳方法是什么?排序?有没有比循环检查v[i]更快的方法??迭代器是否更快/更清洁?还是直接调用sort更好?每次(尽管“v已经排序”的情况很常见)?我们可以安全地假设vector只包含POD,通常是floats有时double和int秒。vector的大小是不平凡的(通常是几千个项目)但不是极端的(不是千兆字节大小)。在某些情况下,我们会立即对vector进行排序,但在其他情况下我们不会(这是我们算法的错误情况)。我们已尽可能使用“IsSorted”标志。 最佳答案 Istheresomethingfa

c++ - 检查 vector 是否已排序的最佳算法

检查std::vector的最佳方法是什么?排序?有没有比循环检查v[i]更快的方法??迭代器是否更快/更清洁?还是直接调用sort更好?每次(尽管“v已经排序”的情况很常见)?我们可以安全地假设vector只包含POD,通常是floats有时double和int秒。vector的大小是不平凡的(通常是几千个项目)但不是极端的(不是千兆字节大小)。在某些情况下,我们会立即对vector进行排序,但在其他情况下我们不会(这是我们算法的错误情况)。我们已尽可能使用“IsSorted”标志。 最佳答案 Istheresomethingfa

c++ - 如何衡量函数的调用开销?

我想测量和比较不同函数调用的开销。在处理扩展类同时最小化代码修改的两种替代方法的意义上有所不同:使用抽象基类并在虚拟成员函数中提供实现使用策略宿主类并使用静态和成员函数定义不同的策略这两个选项都与根本不调用函数进行了比较。我也知道NVI设计支持动态多态的类时通常使用的惯用语——我使用的示例只是开销的基准。这是我尝试用于此目的的代码:#include#include#include#include#includeclassInterface{public:virtualdoublecalculate(doublet)=0;virtual~Interface()=default;};cla

c++ - 如何衡量函数的调用开销?

我想测量和比较不同函数调用的开销。在处理扩展类同时最小化代码修改的两种替代方法的意义上有所不同:使用抽象基类并在虚拟成员函数中提供实现使用策略宿主类并使用静态和成员函数定义不同的策略这两个选项都与根本不调用函数进行了比较。我也知道NVI设计支持动态多态的类时通常使用的惯用语——我使用的示例只是开销的基准。这是我尝试用于此目的的代码:#include#include#include#include#includeclassInterface{public:virtualdoublecalculate(doublet)=0;virtual~Interface()=default;};cla