由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - C++ questions
相关主题
c function 在 c里调用和C++调用结果不一样多线程的程序设计有什么好书推荐? (转载)
不用头文件,如何调用函数?C++【推荐】一本有趣的讨论程序设计语言书
[合集] 如果在自己的程序里调用external program (C++/Linux)大家对checked exception怎么看
关于C++中 extern "C"的问题。谭浩强的c c++程序设计对初学者危害有多大
问一下,DLL里面怎么调用外部类啊?关于inline function里的static variable
程序员界大杯具:蜗居中的小贝是搞C++ 的 !zz (转载)function declaration
请教个C++程序设计C++里 variable declaration 有什么用?
急需解决一个C++程序设计的问题,5-10个包子酬谢C++ help: 一个multiple definition problem.
相关话题的讨论汇总
话题: virtual话题: c++话题: functions话题: call话题: function
进入Programming版参与讨论
1 (共1页)
e******d
发帖数: 310
1
I have two C/C++ questions ,
1. If we want to call C function in C++ program, we need to use extern
"C". My question is what will happen to the compiler after we use "
extern "C" ".
2. For hierarchy classes with virtual functions, dynamic binding is used
when we use pointers/references to call virtual functions. The question is
if calling virtual functions degrades performance.
Please explain in detail.
Thank you a lot.
t****t
发帖数: 6806
2
1. the usual practice is simply disable the name mangling for the function.
2. yes, virtual function is not as fast as non-virtual functions. but the
difference is mostly negligible.

【在 e******d 的大作中提到】
: I have two C/C++ questions ,
: 1. If we want to call C function in C++ program, we need to use extern
: "C". My question is what will happen to the compiler after we use "
: extern "C" ".
: 2. For hierarchy classes with virtual functions, dynamic binding is used
: when we use pointers/references to call virtual functions. The question is
: if calling virtual functions degrades performance.
: Please explain in detail.
: Thank you a lot.

e*u
发帖数: 99
3
For 2., this is from the "Advanced C++":
"Even if no advantage is ever taken of their run time properties, the
run time overhead cost is negligible: Making a function virtual
typically adds about 15 percent to the cost of a function call. If
function calls constitute 10 percent of a program's execution
profile, the ubiquitous use of virtual functions will cause about a 2
percent performance drop. However, virtual functions need to be
compared to what the alternative implementations would be with

【在 e******d 的大作中提到】
: I have two C/C++ questions ,
: 1. If we want to call C function in C++ program, we need to use extern
: "C". My question is what will happen to the compiler after we use "
: extern "C" ".
: 2. For hierarchy classes with virtual functions, dynamic binding is used
: when we use pointers/references to call virtual functions. The question is
: if calling virtual functions degrades performance.
: Please explain in detail.
: Thank you a lot.

z****e
发帖数: 2024
4
master shifu,
virtual根本就不会影响效率,我的答案是彻底不会影响。
这个问题我的理解是这样的。
其实virtual function,就是把本来程序员要作的事情,也就是基于类型的函数调用,给编译器作了,程序员解放了。但是代价就是有vritual table查询。
可是这并不是代价,因为如果不用多态,我们也要手动进行基于类型的判断(或者类似判断),这个比virtual还浪费。所以,只要是程序设计的时候,要有基于类型的函数调用,那么vritual是最高效的。如果想彻底提高程序效率,就要避免这种函数调用,这是程序设计理念的问题,不是virtual本身的问题。
综上,virtual是解决基于类型的操作的最高效方案。根本不影响效率。
师傅们给说说吧。

【在 t****t 的大作中提到】
: 1. the usual practice is simply disable the name mangling for the function.
: 2. yes, virtual function is not as fast as non-virtual functions. but the
: difference is mostly negligible.

p******r
发帖数: 2999
5
runtime performance 肯定有影响,你也承认了
你不要扩大话题

,给编译器作了,程序员解放了。但是代价就是有vritual table查询。
似判断),这个比virtual还浪费。所以,只要是程序设计的时候,要有基于类型的函
数调用,那么vritual是最高效的。如果想彻底提高程序效率,就要避免这种函数调用
,这是程序设计理念的问题,

【在 z****e 的大作中提到】
: master shifu,
: virtual根本就不会影响效率,我的答案是彻底不会影响。
: 这个问题我的理解是这样的。
: 其实virtual function,就是把本来程序员要作的事情,也就是基于类型的函数调用,给编译器作了,程序员解放了。但是代价就是有vritual table查询。
: 可是这并不是代价,因为如果不用多态,我们也要手动进行基于类型的判断(或者类似判断),这个比virtual还浪费。所以,只要是程序设计的时候,要有基于类型的函数调用,那么vritual是最高效的。如果想彻底提高程序效率,就要避免这种函数调用,这是程序设计理念的问题,不是virtual本身的问题。
: 综上,virtual是解决基于类型的操作的最高效方案。根本不影响效率。
: 师傅们给说说吧。

t****t
发帖数: 6806
6
they question is virtual call vs non-virtual call. the question is not
virtual call vs "manual dynamic-binding" call.

,给编译器作了,程序员解放了。但是代价就是有vritual table查询。
似判断),这个比virtual还浪费。所以,只要是程序设计的时候,要有基于类型的函
数调用,那么vritual是最高效的。如果想彻底提高程序效率,就要避免这种函数调用
,这是程序设计理念的问题,

【在 z****e 的大作中提到】
: master shifu,
: virtual根本就不会影响效率,我的答案是彻底不会影响。
: 这个问题我的理解是这样的。
: 其实virtual function,就是把本来程序员要作的事情,也就是基于类型的函数调用,给编译器作了,程序员解放了。但是代价就是有vritual table查询。
: 可是这并不是代价,因为如果不用多态,我们也要手动进行基于类型的判断(或者类似判断),这个比virtual还浪费。所以,只要是程序设计的时候,要有基于类型的函数调用,那么vritual是最高效的。如果想彻底提高程序效率,就要避免这种函数调用,这是程序设计理念的问题,不是virtual本身的问题。
: 综上,virtual是解决基于类型的操作的最高效方案。根本不影响效率。
: 师傅们给说说吧。

D*******a
发帖数: 3688
7
其实写成asm就是CALL vs CALL PTR []的区别吧,现代cpu上最多差一个
时钟周期

【在 t****t 的大作中提到】
: 1. the usual practice is simply disable the name mangling for the function.
: 2. yes, virtual function is not as fast as non-virtual functions. but the
: difference is mostly negligible.

t****t
发帖数: 6806
8
不对. 或许古代的CPU上最多差一个周期. 现代的CPU流水线长, 根据这指令的上下文,
很可能差好多周期.

【在 D*******a 的大作中提到】
: 其实写成asm就是CALL vs CALL PTR []的区别吧,现代cpu上最多差一个
: 时钟周期

r********3
发帖数: 2998
9
这两个问题出得很好!!!

【在 e******d 的大作中提到】
: I have two C/C++ questions ,
: 1. If we want to call C function in C++ program, we need to use extern
: "C". My question is what will happen to the compiler after we use "
: extern "C" ".
: 2. For hierarchy classes with virtual functions, dynamic binding is used
: when we use pointers/references to call virtual functions. The question is
: if calling virtual functions degrades performance.
: Please explain in detail.
: Thank you a lot.

e*l
发帖数: 37
10
没这么简单,至少要两步,先从对象中取出虚表指针,再调用
movl (this->vtbl) %eax ;;对象只有在runtime时才能确定
call (%eax, idx, 4) ;;查表调用
也就是说只有第一个指令执行后才能知道call的时候往哪跳转,这个就阻碍了cpu对指令
流的优化,比如指令预取(cache).这个花销虽然不大,但是也没你预计的这样小.
还有一个就是virtual函数在虚调用时无法inline,这个对性能有很大影响,所以很多数
值计算库采用template技术,避免runtime dynamic(vritual function),而是尽量使用
static dynamic.

【在 D*******a 的大作中提到】
: 其实写成asm就是CALL vs CALL PTR []的区别吧,现代cpu上最多差一个
: 时钟周期

1 (共1页)
进入Programming版参与讨论
相关主题
C++ help: 一个multiple definition problem.问一下,DLL里面怎么调用外部类啊?
如何在C里面call C++的routine呢程序员界大杯具:蜗居中的小贝是搞C++ 的 !zz (转载)
C++ Q03:请教个C++程序设计
C++ Q15: throw急需解决一个C++程序设计的问题,5-10个包子酬谢
c function 在 c里调用和C++调用结果不一样多线程的程序设计有什么好书推荐? (转载)
不用头文件,如何调用函数?C++【推荐】一本有趣的讨论程序设计语言书
[合集] 如果在自己的程序里调用external program (C++/Linux)大家对checked exception怎么看
关于C++中 extern "C"的问题。谭浩强的c c++程序设计对初学者危害有多大
相关话题的讨论汇总
话题: virtual话题: c++话题: functions话题: call话题: function