c++ - 有没有办法优化 c++ 字符串 += 运算符?
问题描述
英文不好,但请理解。
string str;
string str_base = "user name = ";
string str_user_input;
string str_system_message;
...
str = str_base + str_user_input + "\n [system message :]" + str_system_message;
cout << str << endl;
我正在使用这样的现有代码,有没有办法优化字符串?
我认为这段代码做了很多无用的操作。有没有办法优化?
解决方案
我认为这段代码做了很多无用的操作。有没有办法优化?
不要猜测,而是通过分析来衡量。
也许(至少在 Linux 系统上)使用诸如gprof(1)或perf(1)或time(1)之类的实用程序,或与time(7)相关的函数,例如clock_gettime(2)。至少你会在 Windows 、MacOSX 和 Android 上找到类似的东西。大多数计算机都有一些类似于HPET的硬件。另请参阅OSDEV了解更多信息。
如果您使用最新的GCC编译器,请务必启用优化。所以至少在使用 gprof (1)之前编译和链接 。还要学习使用GDB调试器(或其他调试器)来观察程序的行为(其操作语义)。g++ -Wall -pg -O2 -flto
您可能会对最近的GCC 10编译器能够进行的优化(在 2020 年夏季)感到惊讶,因为即使不使用inline
. 如果您碰巧了解汇编代码,请尝试foo.cc
使用命令行编译您的 C++ 代码,g++ -O3 -fverbose-asm -S foo.c
然后查看生成的foo.s
文件。
当然,阅读一本好的C++ 编程书籍并查看这个 C++ 参考网站(以及n3337,一个 C++ 标准)。并阅读您的 C++ 编译器(和链接器)的文档。
我认为这段代码做了很多无用的操作。有没有办法优化?
将此类微优化留给您的 C++ 编译器。
首先确保您的代码是正确的,然后花精力进行分析和优化。
当你想到它时,大多数计算机都会花时间做很多无用的操作。阅读已故 J.Pitrat 的博客和他的《人造生物》一书。
作为软件开发人员,您的角色是平衡您的开发工作与计算机时间。今天,计算机大部分时间都比软件开发商便宜。
如果原始性能非常重要,请花时间编写汇编代码。如果使用 Linux,请阅读Linux 程序集 HowTo。准备好比 C++ 低 10 倍的生产力......
如果性能很重要,还可以考虑进行一些元编程和运行时代码生成(例如,使用asmjit或libgccjit或像SBCL一样)。阅读有关部分评估和自动程序生成的更多信息,还请阅读Dragon Book和一些算法简介
另一个答案说:
优化问题乍一看似乎微不足道
当然不是小事。注意赖斯定理!
我认为这段代码做了很多无用的操作。有没有办法优化?
大概。考虑使用机器学习方法进行优化,例如MILEPOST GCC或Ctuning项目。在许多生成或分析C++ 代码的开源项目(包括CHRIOT、GCC、Clang、RefPerSys、Frama-C、Qt、ANTLR、SWIG)中寻找(至少是为了获得灵感)。
重要的问题是经济问题:将代码优化 1% 是否值得您花时间(例如花费数月的努力,也许是编写GCC 插件)?在某些情况下,付出努力是值得的,但在大多数情况下并非如此。
推荐阅读
- python - Str.split and time.sleep python when executed output is coming as the word+ none
- python - This API key is not authorized to use this service or API
- php - 在 WooCommerce 中获取产品评论计数的自定义功能
- json - A question about "JSON 2 Table using VueJS"
- r - 您能帮我使用 Rvest 进行网页抓取吗?
- javascript - 更新列表时更新模块即时更改
- amazon-web-services - 在 Squarespace 开发人员模式下,可以将 AWS CLI 开发工具包保存到网站的服务器端“主”目录吗?如果是这样,怎么做?
- pytorch - 如何在pytorch中实现部分跨步卷积层?
- vba - 在非连续范围内使用多个列表框
- php - simplemde-markdown-editor not allowing typing