This topic has been archived. It cannot be replied.
-
工作学习 / 专业知识杂谈 / C比C++快吗
-winterbear(Hibernate);
2006-3-8
{2205}
(#2826586@0)
-
C可以直接写malloc而C++是一个函数调用???你的理解在这附近有问题.
BY THE WAY,我用C,就基本不用MALLOC.需要动态分配内存的时候,很多时候都是自己搞定.
-iwantcar(EnjoyStudying);
2006-3-8
(#2826678@0)
-
有问题是啥问题?他说那个overhead可以通过把constructor inline来避免的,你怎么解释?
-winterbear(Hibernate);
2006-3-8
(#2826849@0)
-
要解释清楚挺费劲,你就自己琢磨吧,如果其它C++/C真正大侠看不过眼,就请指教吧.
-iwantcar(EnjoyStudying);
2006-3-8
(#2826891@0)
-
嘿,你看不懂就说看不懂,何必呢。不管怎样,他原文是说了 This overhead can be reduced by defining the constructor inline的吧?那我如果care性能到有病的程度,把constructor给Inline了不就得了吗,并不比C慢那
-winterbear(Hibernate);
2006-3-8
(#2826905@0)
-
1.construct have nothing to do with malloc.
2. c don't have construct at all.
and your logic is such a mess around this issue.
-iwantcar(EnjoyStudying);
2006-3-8
(#2826909@0)
-
你真的是没看懂他那个例子。再看看,只要对比下C++的constructor和翻译到C的constructor就行了
-winterbear(Hibernate);
2006-3-8
(#2826927@0)
-
我根本就没看,以前就读过类似文章,你这篇,一看那调调就知道抄的了.
-iwantcar(EnjoyStudying);
2006-3-8
(#2826945@0)
-
when you inline, how about inheritance.
-iwantcar(EnjoyStudying);
2006-3-8
(#2826920@0)
-
没想过。但是至少我在C++里面可以象C一样,我用struct,不用继承。别忘了C++是C的超集
-winterbear(Hibernate);
2006-3-8
(#2826944@0)
-
我不懂C++,但至少我知道 this 是必须传入函数的,否则动态连编有可能就找不到object.
-canadiantire(轮胎-M.I.N.K.);
2006-3-8
(#2826694@0)
-
哦,我糊涂了。如果是用C来实现,同样需要一个struct,函数需要显式地传入一个指向struct的指针。C里面这个指针是少不了的,不然同样找不到
-winterbear(Hibernate);
2006-3-8
(#2826878@0)
-
new 分配内存不是编译器就可以优化的,可能是调用这个new,也可能调用那个new。
-canadiantire(轮胎-M.I.N.K.);
2006-3-8
(#2826698@0)
-
我没说优化new,请再看看
-winterbear(Hibernate);
2006-3-8
(#2826854@0)
-
"唉...编译器的优化可以搞定的东西。"
-canadiantire(轮胎-M.I.N.K.);
2006-3-8
(#2826877@0)
-
优化是说inline。他说的overhead不是在new上,是在函数调用上。
-winterbear(Hibernate);
2006-3-8
(#2826882@0)
-
据我所知,C++的性能比汇编要快5倍,更别说C了。 99%的实时操作系统都是用c++写的。
-kramer(kramer);
2006-3-8
(#2826813@0)
-
没错,另据我所知,Microsoft的下一代XP的核心将用Basic编写,而下一代的GEFORCE 3D CPU的核心也将由Perl改写。。。
-taop(Bard-Tamer);
2006-3-8
(#2826840@0)
-
下一代XP?xp sp3?
-vega_lee(天津包子-就不改);
2006-3-8
(#2826953@0)
-
no, 下一代XP叫YP.......你叫什么真啊~~:)
-taop(Bard-Tamer);
2006-3-8
(#2827189@0)
-
很感兴趣的说,您能举几个例子吗?
-zhbuser(我在干嘛);
2006-3-8
(#2826943@0)
-
别扯!
-rogerscanner(Roger);
2006-3-8
(#2827098@0)
-
我有个蠢问题:文中所说的C++编译器是用C写的还是汇编写的?
-j30(猪狗不如);
2006-3-8
(#2826844@0)
-
c++,c ,汇编都有吧
-google2002(Google);
2006-3-8
(#2827565@0)
-
我觉得文章是有道理的. c++慢在1.每次操作class需要寻址this 2. 多态的时候每次要寻址指针数组 3.使用try/catch. 不过牺牲这一点点的性能而能换来比C高很多扩展性和多态,我觉得是值得的
-google2002(Google);
2006-3-8
(#2827563@0)
-
1.如果用struct,那么函数也还是需要一个显式的指向struct的指针,对吧?2,3是有道理的,你可以说C++的有些特性会损失一些性能,但是不能因此说C比C++快,因为C++毕竟是C的超集,在C++里面我也可以不用多态不用继承不用try/catch
-winterbear(Hibernate);
2006-3-8
(#2827577@0)
-
如果你不用多态不用继承不用try/catch那么c++和c性能我感觉应该是差不多的。其实你用gcc一样可以编译c++的代码,只有需要用到stl和template的才用g++.例如我自己就从来不用try/catch,能用memcpy就不用std::string
-google2002(Google);
2006-3-8
(#2827616@0)
-
如果你把C++当作C来用,性能当然是差不多.那就别给OO贴这么多金了.这个STL和TEMPLATE一上,C++好处和坏处就一块来了.
-iwantcar(EnjoyStudying);
2006-3-9
(#2828629@0)
-
搞笑,我框架和设计模式用c++,内部一些小函数用c这有什么问题?难道用c++就不允许用pinrtf? STL/Template使用的时候几乎等同于inline,他们的坏处是什么你倒是说说啊你到底用过STL和模板没有,
如果没有的话请你shutup
-google2002(Google);
2006-3-9
{48}
(#2828984@0)
-
.. when I have time and you calm down. I will give you some drawback of template...
-iwantcar(EnjoyStudying);
2006-3-9
{2}
(#2829101@0)
-
C++ 还可以嵌套汇编呢,这样扯没什么意思。OO的目的是什么,不是为了提高效率的。太追求效率,别人会看不懂你的程序
-rogerscanner(Roger);
2006-3-9
(#2830455@0)
-
本人最近做的一个项目, 由于硬件的内存很小 <2M, 用C写程序时连STAND LIBRARY都不能用.
LINUX KERNEL 的源代码也没有用C的标准库.
-goodchoice(buff);
2006-3-9
(#2830099@0)
-
windows 也没有.
-iwantcar(EnjoyStudying);
2006-3-9
(#2830122@0)
-
你这么热爱C, 喜欢挑战的人,还是玩FPGA更刺激. 介绍一个网站: http://www.jopdesign.com/
-goodchoice(buff);
2006-3-9
(#2830149@0)
-
多年前就玩了,从硬件到软件都是自己做的。208脚呢!
-iwantcar(EnjoyStudying);
2006-3-9
(#2830540@0)
-
把10-20个RISC CPU放到一个百万GATES的核, 模拟大型计算机做并行计算的玩过吗?我朋友玩过, 我没有.
-goodchoice(buff);
2006-3-9
(#2830570@0)
-
百万GATES我用过,设计一个比一般CPU简单的东西.一下子就给我用完了.但是百万MACRO我就没有用过了.
-iwantcar(EnjoyStudying);
2006-3-10
(#2830700@0)
-
百万gates的FPGA的资源并没有真的是一百万,要少很多。很多小的CPU,放在百万门级的FPGA绰绰有余,比如Altera的NIOS。如果单单想用光FPGA的资源,很容易,几十行的代码就可以。另外,在FPGA里,什么是MACRO?这个我没有听说过。
-viv(viv);
2006-3-10
(#2832425@0)
-
中文叫做宏单元.
-iwantcar(EnjoyStudying);
2006-3-10
(#2832756@0)
-
宏单元是CPLD结构里的东西。
-z24(Mnpl/St Paul);
2006-3-11
(#2832944@0)
-
我把LE也认为是宏的一种..你如何称呼LE的?真不知道其中文名字,也就把这个破烂英文也忘悼.真不明白人们为什么这么喜欢给本质一样的东西起各种怪名字.I am old style people. I changed slowly after used a term for long and people change the name of the same thing.
-iwantcar(EnjoyStudying);
2006-3-11
{113}
(#2833021@0)
-
我这个人有个贱毛病,很不喜欢用CODE LIBRARY,一般情况下,只要是力所能及,都是自己写CODE.
-iwantcar(EnjoyStudying);
2006-3-11
(#2833413@0)
-
是不是很久没有接触HDL设计了?我还没有听说过FPGA设计用CODE LIBRARY的呢。我说的意思是,用verilog或者vhdl可以用很少的代码写出占用很多资源的逻辑来,比如,一个很宽的加法器。
-viv(viv);
2006-3-11
(#2834017@0)
-
The last time was 2 year ago. I didn't remember the name of such ieee library....etc..
I used VHDL. for me, 1个很宽的加法器, is the same as a narrow one. Because I can write one myself. It is not difficult at all.I can design any bits of carry-advanced adder. Of course, using library can save a lot of time. However, sometimes, for the same adder function, I will test 3 solutions and chose the best performance.(Space/speed).
And when you write the code yourself, you will have flexibility.
It is sad for so many intelligent use too much library and turn themself as a slave of library and 3rd party tools.
-iwantcar(EnjoyStudying);
2006-3-12
{402}
(#2834977@0)
-
Sorry, flash disk less than 2m, memory is around 780k
-goodchoice(buff);
2006-3-9
(#2830135@0)
-
sorry. I mean windows kernel.
-iwantcar(EnjoyStudying);
2006-3-12
(#2834997@0)
-
No. It totally depends on who writes the code and which compiler is used.
-surfingman(Nick);
2006-3-11
(#2833502@0)
-
C和C++都略知皮毛, 个人感觉C是程序员算好地址让机器去读数, 又快又省内存. OO是COMPILER, 自动生成地址, 慢而且不经济, 但是准确率高,程序简单. 象SmallTalk其实是很不错的OO语言,可惜超前了. 现在机器快了, 不在乎程序速度了.
-guest3(guest);
2006-3-12
(#2835929@0)