Algorithms
1 | class Solution { |
Factorial Trailing Zeroes
思路:要找0的个数,10等于2*5,也就是找出5的个数。
1 | class Solution { |
使用递归的方式来解决:
1 | class Solution { |
Review
本周阅读英文文章 The Next Level of Data Visualization in Python
Technique
在《内存泄漏了,我该如何定位和处理?》一文中学习到使用bcc工具包中的memleak检测内存泄漏,来跟踪系统或指定进程的内存分配、释放请求,然后定期输出一个未释放内存和相应调用栈的汇总情况(默认5秒)。
OS: Ubuntu18.04
1 | sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4052245BD4284CDD |
编译并运行如下代码:
1 |
|
运行程序后,通过memleak进行分析,可以看出fibonacci分配的内存没有释放。
1 | root@top:~# /usr/share/bcc/tools/memleak -a -p $(pidof app) |
对child函数进行修正:
1 | void *child(void *arg) |
再次编译运行代码,并执行memleak工具,可以看到已经修正成功。
1 | root@top:~# /usr/share/bcc/tools/memleak -a -p $(pidof app) |
Share
《C++性能优化指南》测量性能-90/10原则
性能优化的基本规则是90/10规则:一个程序花费90%的时间执行其中10%的代码。这只是一条启发性的规则,并非自然法则,但对于我们的思考和计划却具有指导性。这条规则有时也被称为80/20规则,但思想是一样的。直观地说,90/10规则表示某些代码块是会被频繁地执行的热点(hot spot),而其他代码则几乎不会被执行。这些热点就是我们要进行性能优化的对象。
90/10规则的一个结论是,优化程序中的所有例程并没有太大帮助。优化一小部分代码事实上已经足够提供你所想要的性能提升了。识别出10%的热点代码是值得花费时间的,但靠猜想选择优化哪些代码可能只是浪费时间。