社区
模式及实现
帖子详情
求如何在VC里用跳转表的方式编译swich
TianXiang233
2005-09-08 08:42:57
我做了一个庞大的switch,case的值是0~255乱序,
希望被编译成跳转表,否则效率太低了。
但不知道有没有编译选项或指令可以达到这个目的。
...全文
504
18
打赏
收藏
求如何在VC里用跳转表的方式编译swich
我做了一个庞大的switch,case的值是0~255乱序, 希望被编译成跳转表,否则效率太低了。 但不知道有没有编译选项或指令可以达到这个目的。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
f4_101
2005-12-11
打赏
举报
回复
多而乱的跳转,用一般的方法不便于管理,可以考虑用高级的方法实现,虽然这样会损失一定的运行效率,但是代码维护方便,这个折中是可取的.
greenteanet
2005-12-11
打赏
举报
回复
mark
edrftgyh
2005-11-25
打赏
举报
回复
MARK
tudou614
2005-11-16
打赏
举报
回复
MARK下
fine10000
2005-11-01
打赏
举报
回复
学习
laomai
2005-10-21
打赏
举报
回复
居然老蒋跑到这里灌水了,呵呵
herryhuang
2005-09-30
打赏
举报
回复
只能通过汇编实现。
蒋晟
2005-09-12
打赏
举报
回复
switch语句通常编译成比较高效的跳转表。在我看来唯一的通用的优化是将最常用的case语句放在前面以尽量避免在跳转时跨越内存块。对于非整型分支取值,也可以用std::map来做跳转,但是需要付出一定的性能。
如果分支值属于常量的话,也可以把switch换成模板
template<int I>
class CASE {
public:
static inline void f() //default
{ }
};
class CASE<value1> {
public:
static inline void f()
{ }
};
class CASE<value2> {
public:
static inline void f()
{}
};
CASE<I>::f();
但是分支值一般都不是常量。另外一种方法是使用循环模板:
template <template <int> class T, int I>
struct Root
{
int run(int pos) const
{
const T<I>& ref = static_cast<const T<I>&>(*this);
if (pos== I)
return ref.getValue();
return T<I-1>().run(pos);
}
};
但是
1 很多不标准的编译器,例如VC,不支持循环模板
2 分支值越大,循环次数越多,函数调用次数越多。
如果CASE中的处理代码需要被重载,简单的方案就是使用虚函数表,但是在分支值取值范围很大的时候虚函数表可能过于庞大,这时候类似于MFC实现的有缓存的线性查找性能可能比较高一些。
DiabloWalkOnTheEarth
2005-09-12
打赏
举报
回复
别人既然在乎 switch 是否被编译器编译为跳转表, 肯定也在乎函数调用的成本啦.
不过如果不想搞的太麻烦, 看来是只有用函数指针鸟哦.
蒋晟
2005-09-12
打赏
举报
回复
差不多啦,多一层函数调用而已
DiabloWalkOnTheEarth
2005-09-11
打赏
举报
回复
MFC的是函数指针啦,木意思哦....
蒋晟
2005-09-10
打赏
举报
回复
去看MFC的消息映射里面怎么做跳转的
晨星
2005-09-10
打赏
举报
回复
嘿嘿,那就不知道了。想别的办法吧。
编译器似乎是没有这么个选项的。
DiabloWalkOnTheEarth
2005-09-09
打赏
举报
回复
函数指针就要多一次函数调用的成本哪, 不大合适哦。
晨星
2005-09-09
打赏
举报
回复
不是存标号,是存函数指针。
DiabloWalkOnTheEarth
2005-09-09
打赏
举报
回复
C/C++ 好像数组里不能存标号哦, 要做跳转表就要动汇编鸟, 麻烦哦.
晨星
2005-09-08
打赏
举报
回复
应该没有决定编译器具体实现算法的编译选项。
如果真的想用跳转表,为什么不干脆直接用跳转表来些程序呢?
jsjjms
2005-09-08
打赏
举报
回复
支持楼上,既然有这个想法,为什么一定要依靠编译器来做这些动作呢?
VC
2010 开发 电子书
最新的
VC
2010使用指南,包含许多新特性,以及各种资源的使用等。对于学习
VC
还是比较有帮助。
vc
学习
vc
的完全教程,很实用!
VC
操作 Excel
VC
操作 Excel A brief introduction to C++ and Interfacing with Excel
计算机
VC
课件第三章课件
这是我们上课用的计算机
VC
第三章课件,希望对大家有用
C++实例.zip
C++实例代码,使用
VC
6
编译
,实例循序渐进,经过
编译
运用,无任何错误
模式及实现
5,529
社区成员
4,167
社区内容
发帖
与我相关
我的任务
模式及实现
C/C++ 模式及实现
复制链接
扫一扫
分享
社区描述
C/C++ 模式及实现
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章