作者tinlans ( )
看板C_and_CPP
标题Re: [问题] 为什麽作业系统都用C写? 而不用C++呢?
时间Sat Mar 7 20:48:57 2009
还是不说废话了,
直接写程式吧,
目的是同需求下使用 virtual function 到底有没有 overhead:
http://tinyurl.com/bcjawe
档案里面分别是不用 OO 写的 C、用 OO 写的 C、用 OO 写的 C++,
为了公平起见我 C++ 的函式也用 C subset 提供的,
以下是我用的环境:
Intel(R) Xeon(R) CPU 5160 @ 3.00GHz
x86-64 Gentoo Linux (kernel 2.6.28-gentoo-r1)
gcc version 4.3.3 (Gentoo 4.3.3 p1.0, pie-10.1.5)
编译参数如同里面 makefile 只是 -O3。
各跑五次的数据 (loop 跑 500,000,000 次):
c:
1.668u 0.000s 0:01.66 100.0% 0+0k 0+0io 0pf+0w
1.668u 0.000s 0:01.66 100.0% 0+0k 0+0io 0pf+0w
1.668u 0.000s 0:01.66 100.0% 0+0k 0+0io 0pf+0w
1.668u 0.000s 0:01.66 100.0% 0+0k 0+0io 0pf+0w
1.668u 0.000s 0:01.66 100.0% 0+0k 0+0io 0pf+0w
c_oo:
1.198u 0.000s 0:01.19 100.0% 0+0k 0+0io 0pf+0w
1.180u 0.000s 0:01.18 100.0% 0+0k 0+0io 0pf+0w
1.181u 0.000s 0:01.18 100.0% 0+0k 0+0io 0pf+0w
1.179u 0.000s 0:01.18 99.1% 0+0k 0+0io 0pf+0w
1.175u 0.000s 0:01.17 100.0% 0+0k 0+0io 0pf+0w
cxx:
1.344u 0.000s 0:01.34 100.0% 0+0k 0+0io 0pf+0w
1.341u 0.001s 0:01.34 100.0% 0+0k 0+0io 0pf+0w
1.344u 0.000s 0:01.34 100.0% 0+0k 0+0io 0pf+0w
1.341u 0.000s 0:01.34 100.0% 0+0k 0+0io 0pf+0w
1.343u 0.000s 0:01.34 100.0% 0+0k 0+0io 0pf+0w
显然用 C++ 的 OO 机制是会比 C 的 OO 慢一点
(
其实是因为我 C 的部分没有实作出 OO 特性,
它是 static 语意 (要拔掉 union 然後用 void * 代替资料栏位),
完全模拟 OO 的话那 0.2 秒的差异马上会不见,
有人想战的话我再做细部实作 XD
)
但如果是我的话我会选择写 C++,
用 C 实现 OO 有很多人工打字的地方可能不小心犯错造成很多困扰,
用 C++ 实现 OO 的话那些 code 都是 compiler 帮我产生,
而且我不认为有多少人会很认真的写 c_oo 的那种写法;
更何况本科系的人都知道 80/20 法则 (or 90/15) 及 Amdahl's law,
你只要在真正需要效能的那一小部分程式码避开用 C++ 写 OO 就行了,
C programmer 常常有一个通病就是他会认为每行程式码都随时随地在跑,
如果是这样的话演算法的 amortized time complexity 这套理论也可以丢了。
--
Ling-hua Tseng (
[email protected])
Department of Computer Science, National Tsing-Hua University
Interesting: C++, Compiler, PL/PD, OS, VM, Large-scale software design
Researching: Software pipelining for VLIW architectures
Homepage:
https://www.tinlans.org
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.160.108.190
※ 编辑: tinlans 来自: 118.160.108.190 (03/07 21:09)
1F:→ ggg12345:最影响OS的overhead部份才是关键吧!使用kernel/monitor 03/07 22:33
2F:→ ggg12345:模式的OS(如unix),上半层的monitor用o-o概念最接近,下半 03/07 22:35
3F:→ ggg12345:层的kernel使用C+ASM弹性最适宜,并行的虚耗都在Kernel上 03/07 22:41
4F:→ weiyucsie:後来试着用c改写cxx那个版本测测看(不知道有没有写对XD) 03/08 04:49
5F:→ weiyucsie:结果不同机器编译出来的相对速度不太一样XD 03/08 04:50
6F:→ weiyucsie:(和多核心或ht技术有关吗?XD) 03/08 04:51
7F:→ tinlans:跟指令集有差,还有编译器。 03/08 13:29