MyException - 我的异常网
当前位置:我的异常网» VB » 求高效率的取高字节VB6的函数

求高效率的取高字节VB6的函数(3)

www.myexceptions.net  网友分享于:2013-04-10  浏览:25次

谢谢老马……知道怎么回事了,你的做法是直接让myIntegerArr真数组的地址指向mylong的地址,所以直接对mylong赋值就可以取得了,而我的是copy了mylong的值……
------解决方案--------------------
没错.
其实在C语言里就没这么麻烦,因为直接就可以定义union,VB6里由于没有原生提供这个特性,只能绕个大弯了

由于没有任何运算过程,性能当然是最好的.
------解决方案--------------------
引用:
你这个测试有问题的,zGetLngHigh()和GetHiWord(),谈不上谁快,我在VB6环境下编译时候,连续循环执行1000万次,基本一致的,有时第一块,有时第二个快,但都比内存拷贝快近一倍,你这个内存拷贝用SafeArray肯定还要慢得多的。

先不说zGetLngHigh()与GetHiWord()的区别.

你大概还没看我的代码吧
------解决方案--------------------
可能没看清楚代码吧!直接赋值跟计算不是一个级别的!还是支持老马……
------解决方案--------------------
楼主没发现我的代码与老马的代码的区别吗?我的每次都需要copymemory,但是老马的只需要一次,以后不管你执行几千万还是几亿次都不需要再copymemory了,因为他们的地址共用了……
------解决方案--------------------
当然,如果楼主你有更好的代码,希望可以共享一下……
------解决方案--------------------
好吧,我只是提供一个方案,没想到还被你BS一顿,真是对不起了
------解决方案--------------------
酷心的函数由于全是使用的位运算符,CPU中直接就有相应的数学指令,编译后应该是CPU的直接运算,使用的应该也是CPU的内部缓存.

展开与不展开的区别主要还是在函数调用的开销上,调用函数时涉及到内存的操作的话,内存速度肯定没CPU内部缓存快.

而我的模拟UNION方案主要是内存复制,并未使用运算符,编译后就应该是一堆的MOV指令,完全是基于内存的.

那么这两种方案谁快谁慢是与具体电脑有关的.

如果CPU强大,那么酷心的方案应该会更快.

如果CPU不是很强,但内存频率高的话,就应该是模拟UNION快了.
------解决方案--------------------
引用:
引用:
支持一下先,不过不是很懂为什么要绕那么多弯?看代码是用MyLong的地址指针替换掉myIntegerArr数组的地址指针,不知道可不可这样

差别很大,HOHO.

我绕那么多弯,目的是让myIntegerArr()与myLong都指向同一个地址,类似C语言中的union.

一旦这一步完成,以后要取myLong的高低字时,直接到myI……


使用数组做指针的时候,不就使用copymemory了?
------解决方案--------------------
引用:
获取Long的高字

Public Function HiWord(ByVal DWord As Long) As Integer
  HiWord = (DWord And &HFFFF0000) \ &H10000
End Function

扯远了吧。
要满足楼主的要求,仅需非常简单的函数。
再想快一点,直接写表达式,省去函数调用的栈操作。
------解决方案--------------------
引用:
引用:
获取Long的高字


Visual Basic code
?



123

Public Function HiWord(ByVal DWord As Long) As Integer  HiWord = (DWord And &HFFFF0000) \ &H10000 End Function
扯远了吧。
要……



可以更简单:
Public Function HiWord(ByVal DWord As Long) As Integer
  HiWord = DWord  \H10000 
End Function

------解决方案--------------------
引用:
可以更简单:
Public Function HiWord(ByVal DWord As Long) As Integer
  HiWord = DWord  \H10000 
End Function

你以为 Long 是无符号整数啊!用 &HFFFFFFFF 试试,结果多少?
------解决方案--------------------

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有