gpt4 book ai didi

c++ - 如果程序中没有结构,C++ 代码运行得更快吗

转载 作者:搜寻专家 更新时间:2023-10-31 00:01:35 24 4
gpt4 key购买 nike

我知道如果我们使用类、结构等来构建我们的程序会有很大帮助,但是我们避免这些结构并根据基本 C++ 语法编写代码是否对运行速度有帮助?

例如,我正在尝试编写一个处理 vector 的程序。现在,编写一个类 vector 并定义其方法(如 set_at_index(int i))听起来很诱人。设置特定行的值 i这个 vector 。此外,我可以检查是否 i<=N其中 N是相关 vector 的长度。

我的困惑是,这些例程每set_at_index经常使用的方法将需要一个“if”语句。因此,如果我希望我的代码运行得更快,我应该避免它并继续声明一个数组并手动注意没有内存泄漏吗?

有什么方法可以在不增加代码速度负担的情况下检查内存泄漏?

最佳答案

是的,边界检查会花费更多的时间。但这将花费很少的额外时间,以至于仅当代码运行 28894389375 次并且加起来可能达到 1 毫秒时才有意义。请注意,如果您使用 at 成员函数,std::vector 仅执行边界检查,如果您使用 operator[],则不会。此外,如果您正在做任何事情,例如写入文件或将文本打印到控制台,那么执行一次可能比访问一千万次边界检查数组访问花费更多的时间,因为 I/O 相对非常非常慢。

通常,在没有边界检查的情况下,使用类的代码将以与使用普通数组的代码相同的速度运行。像您建议的那样手动管理内存的问题是很容易忘记清理它,或者只通过程序的一种执行路径清理它,或者在发生异常时无法清理它。这真的不值得。此外,使用不带边界检查的 vector 类与使用不带边界检查的动态数组一样快。无论哪种方式,您都需要付费。

我还建议使用 std::vector 而不是编写您自己的 vector 类,因为它们几乎可以完成您可以自己完成的所有优化,而且它们通常具有能够编写代码的优势对于他们特定的编译器,也许能够利用只有该编译器才能做的事情,因为他们知道更多它的实现。 STL 类也经过专家(通常)的严格测试和编写。

您应该先编写代码,然后使用分析器进行测量以查看代码中的瓶颈如果速度不够快,然后优化瓶颈。我敢打赌,对数组进行边界检查可能不会成为这些瓶颈之一。

可以使用 valgrind 等工具检查内存泄漏。您不会在代码本身中执行此操作。

关于c++ - 如果程序中没有结构,C++ 代码运行得更快吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9751291/

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