C++

第三次挑战 llc

每次进行 LLVM 开发,都会浪费 3min 的构建时间。 $ time ninja -C build modc ninja: Entering directory `build' [2/2] Linking CXX executable modc real 3m10.

Windows 控制台应用程序隐藏控制台

blender 的早期版本中,启动 blender 后会先显示一个控制台窗口,接着消失,弹出新的窗口。也许意味着控制台应用程序是可以隐藏控制台的。功夫不负有心人,找到了几种解决方法: 1 - 控制控制台窗口 ShowWindow(GetConsoleWindow(), SW_HIDE); 需要用到两个 Windows API: ShowWindow 设置指定窗口显示状态 GetConsoleWindow 返回控制台窗口句柄 获取控制台窗口句柄,然后修改他的显示状态。 但是官网不建议继续使用 GetConsoleWindow 接口。

Java 程序启动

你们说,带群友翻 jdk 代码会不会很酷? 拜托,超酷的好不好。 假设 首先假设在工作目录中指定并启动编译好的主类: $ java MainClass 至于 jar 包,你用压缩软件打开,然后打开文件 META-INF/MANIFEST.MF,里面 Main-Class 那一行就写着主类:

C++ 编写的多项式解析

输入为描述多项式的字符串,使用自动机将其解析为结构化的数据 输入示例: 2 x^2 2x x 2x^2 代码: #include <cstdlib>#include <ctype.h>#include <stdio.h>#include <sstream>#include <vector> // 项 struct term { int mul; int exp; }; // 多项式 typedef std::vector<term> poly; enum poly_parse_state { ppoly_init, // 初始状态 ppoly_mul, // 系数 ppoly_var, // 变量 ppoly_exp, // 指数 ppoly_tem, // 产生一个项 ppoly_suc, // 产生一个多项式 ppoly_err // 错误 }; // 状态转移 #define transfer_state(s) {state = s; break;} // 读取 #define move() { \ do{ \ ch = is.

[转载] 非人性(反人类)方式提升性能办法总结(待更新)

本文仅致以热衷于提升性能的开发者,总结几年内的经验与办法,阐述一些意识到或意识不到的性能提升办法。很多时候,某种编程写法仅仅只是出于习惯/可维护性/行业惯例,但不是性能。这里献丑一下,挖掘出来,以下某些观点可能让人感觉很痛苦,但值得反思。 谨慎使用正则表达式 对于正则表达式,很多开发者已经很熟悉了。当然正则表达式也确实带来了很多好处,对于复杂字符串规则的把握,代码可维护性,实乃字符处理的一大开发区。 然而今天这里不是为正则表达式歌功颂德的,我的观点是谨慎使用正则表达式。如果开发者自身有更好的更高性能的实现方式完成正则表达式功能的话,那么应该优先采用更好的方式实现,例子参考于: https://gitee.com/deng_dan_jun/function_finishing/blob/master/常见正则表达式C++实现函数 一个理想的正则表达式实现应该是编译器扫描用户的代码,解析其正则表达式语义,实现一段等同于顶尖高手实现的代码嵌入到工程里面调用。可惜这仅仅还是理想,当今的正则表达式库依然未能实现这点,因此在使用正则表达式的时候,需要谨慎对待。 谨慎使用格式化操作函数\库 这里说的格式化,形如sprintf,也是字符处理的一大利器,然而,复杂的格式化操作同样也会带来性能上的损耗。参考例子: https://user.qzone.qq.com/1075716088/infocenter 以及 https://blog.csdn.net/q229827701/article/details/41015483 读者可以自己使用直写方式实现,对比性能,会有数倍的差距,对于更为复杂的格式化操作,性能损耗会更大。此条原理本质上与第一条类似。 最好不要在循环里面反复创建变量 这点看似简单,但是大部分工程都存在这个问题。很多优秀的算法本身也因为使用者这点不太良好的习惯而影响到性能。如果反复创建的是创建开销大的对象,例如STL容器则问题影响会更大。 网上很多测试例子以一些简单的类型如int等进行测试,认为反复创建影响甚微,然而忽视了一点,对于一些复杂开销大的自定义类型,编译器根本无法做到很良好的优化。假如有这样一段代码: