Chinaunix

标题: 如何提高查找速度 [打印本页]

作者: Go_To_CU    时间: 2005-09-18 11:25
标题: 如何提高查找速度

  1. int empty_array(char *array, int size)
  2. {
  3.     char *p = array;
  4.     for (p = array; p < array + size; p++) {
  5.         if (*p != 0) {
  6.             return(0);
  7.         }
  8.     }
  9.     return(1);
  10. }

复制代码

这段代码主要是看数组是否为空,即查找一个非0的元素,请问可以有更快的查找速度吗?
作者: mingjwan    时间: 2005-09-18 11:31
标题: 如何提高查找速度
如果强行转化为int型,然后再检查,会不会变快呢?
当然这个速度还与字节对齐有关。呵呵。
作者: 雨丝风片    时间: 2005-09-18 11:33
标题: 如何提高查找速度
对于这种问题,一种最简单的优化就是稍微修改一下,
先通过++依次判断是否找到满足你条件元素,一旦找到
再判断下标是否在数组下标的合法范围之内,这样至少
可以避免每一轮循环都要先去判断下标是否合法。
作者: mingjwan    时间: 2005-09-18 11:37
标题: 如何提高查找速度
如果访问的内存全部为0,不是遭了!
不过想法不错,呵呵。
作者: 雨丝风片    时间: 2005-09-18 11:39
标题: 如何提高查找速度
我说过要“稍微修改一下”嘛,当然要做边界保护的,
比如说,可能要在数组的边界上放一个“多余”的元素。
作者: mingjwan    时间: 2005-09-18 11:40
标题: 如何提高查找速度
如果再稍微修改一下,在换成int,每四字节一读,岂不是更快。当然最好字节对齐了,否则估计就不见效果了。
作者: mik    时间: 2005-09-18 12:06
标题: 如何提高查找速度
[quote]原帖由 "Go_To_CU"]这段代码主要是看数组是否为空,即查找一个非0的元素,请问可以有更快的查找速度吗?[/quote 发表:


int empty_array(char *array, int size)
{
         while (size--)  
                 if (*array++)
                       return 0;
         
        return 1;
}

会不会更有效呢? :)不过会改变参数,不改变参数,只能设临时变量了
作者: mingjwan    时间: 2005-09-18 12:09
标题: 如何提高查找速度
原帖由 "mik" 发表:


int empty_array(char *array, int size)
{
         while (size--)  {
                 if (*array++)
                       return 0;
                 else
                      continue;
    ..........


只是看起来变快了。你的过程又没有比别人少了什么操作。
作者: mik    时间: 2005-09-18 12:14
标题: 如何提高查找速度
原帖由 "mingjwan" 发表:


只是看起来变快了。你的过程又没有比别人少了什么操作。



是有不同的:
(1) size-- 操作比 p+size 效率要高嘛,
size-- 可以编译成:
      mov eax, size
         dec eax

总比 p+size:
        mov eax, p
        add eax, size   
   
是不是? :)

(2) 少了临时变量操作。
   :)
作者: Go_To_CU    时间: 2005-09-18 12:16
标题: 如何提高查找速度
P+size和size--不一样哦,因为指针一次移动的可能是4个字节
作者: mik    时间: 2005-09-18 12:17
标题: 如何提高查找速度
[quote]原帖由 "Go_To_CU"]P+size和size--不一样哦,因为指针一次移动的可能是4个字节[/quote 发表:



晕倒~~~~

连指针的基本用法,你都不懂。

int *p
p--;             // 移动 4个 bytes

char *p
p--;            // 移动 1 个 bytes
作者: mingjwan    时间: 2005-09-18 12:18
标题: 如何提高查找速度
优化后那段代码只执行一次的。没有什么差别。
三楼的想法,改好了,可以省去一半的比较。那才是,提高效率啊。
作者: mik    时间: 2005-09-18 12:27
标题: 如何提高查找速度
原帖由 "mingjwan" 发表:
优化后那段代码只执行一次的。没有什么差别。
三楼的想法,改好了,可以省去一半的比较。那才是,提高效率啊。


省去一半的比较??
不明白?
如何??
作者: mingjwan    时间: 2005-09-18 12:29
标题: 如何提高查找速度
三楼说得很清楚啊。
作者: mik    时间: 2005-09-18 12:30
标题: 如何提高查找速度
原帖由 "雨丝风片" 发表:
对于这种问题,一种最简单的优化就是稍微修改一下,
先通过++依次判断是否找到满足你条件元素,一旦找到
再判断下标是否在数组下标的合法范围之内,这样至少
可以避免每一轮循环都要先去判断下标是否合法。


????

你是说:

(1)先找出非 0 元素? 还是找出 0 的元素? (找不到呢?? 继续找??)
(2)再看是不是超出 size ????
作者: mingjwan    时间: 2005-09-18 12:31
标题: 如何提高查找速度
是啊。难道不是吗?
作者: mik    时间: 2005-09-18 12:31
标题: 如何提高查找速度
[quote]原帖由 "mingjwan"]三楼说得很清楚啊。[/quote 发表:



最多只能说,省去了一个计算时间,

而且,他说的也是错误的想法
作者: mingjwan    时间: 2005-09-18 12:33
标题: 如何提高查找速度
怎么错了?
作者: mik    时间: 2005-09-18 12:53
标题: 如何提高查找速度
[quote]原帖由 "mingjwan"]怎么错了?[/quote 发表:



(1)先找出非 0 元素? 还是找出 0 的元素? (找不到呢?? 继续找??)
作者: mq110    时间: 2005-09-18 12:57
标题: 如何提高查找速度
3楼的想法 到是挺好..不过不正确.
作者: 雨丝风片    时间: 2005-09-18 13:01
标题: 如何提高查找速度
原帖由 "mik" 发表:



(1)先找出非 0 元素? 还是找出 0 的元素? (找不到呢?? 继续找??)


我所说的并不局限于某个具体的问题,你想找什么样的元素就找什么样
的元素,条件是你自己定的,但这本质上是一个顺序查找的问题,我说
的只是对顺序查找的一般优化原则。

在楼主的程序中,使用了一个for循环:
for (p = array; p < array + size; p++) {

这样,在每一轮的循环中,都会先去判断p < array + size是否满足,然后
才会去判断当前位置上的元素是否满足我们的条件。而我所说的就是对于每一
个元素,我们可以先去判断它是否满足我们的条件,一旦满足,我们再去判断
它的下标是否仍然在数组的合法范围之内,这样,实际上p < array + size
这个判断最多只会执行一次。

但是在实际编程过程中,可能对你的数组需要进行一点特别的处理,可能
需要安排一个多余的元素,这个元素必须是满足你的“条件”的,这样才能
让循环正确停止下来,而此时显然下标已经不在“合法”范围之内了,因此
并不会影响到查找失败的结果。
作者: mik    时间: 2005-09-18 13:12
标题: 如何提高查找速度
原帖由 "雨丝风片" 发表:


我所说的并不局限于某个具体的问题,你想找什么样的元素就找什么样
的元素,条件是你自己定的,但这本质上是一个顺序查找的问题,我说
的只是对顺序查找的一般优化原则。

在楼主的程序中,使用了一个for循环..........




这个元素的选择会有一定困难,你不能担保这个元素在数组中是正常有用的。
作者: Go_To_CU    时间: 2005-09-18 13:16
标题: 如何提高查找速度
对,这个特殊元素不好弄,难道就没有别的操作方式了吗?
作者: mq110    时间: 2005-09-18 13:17
标题: 如何提高查找速度
常规的查找吧. 按4 bytes
作者: 雨丝风片    时间: 2005-09-18 13:17
标题: 如何提高查找速度
原帖由 "mik" 发表:




这个元素的选择会有一定困难,你不能担保这个元素在数组中是正常有用的。



从严格的意义上来说,这个元素是不属于这个数组的。也就是说,如果
我需要用数组来存放10个元素的话,为了使用我说的方法进行顺序查找,
那么可能就需要生成一个有11个元素的数组,而最后一个元素对外是不
可见的,仅仅用于顺序查找循环的停止。我想,不管你要查找的条件是
什么,在这个地方随便放一个满足你的查找条件的元素应该是很简单的
事情吧?而这个多余的空间就是这个想法的代价。是否可以忍受这个代价,
就需要看数组的大小等其它的因素了。
作者: 雨丝风片    时间: 2005-09-18 13:19
标题: 如何提高查找速度
[quote]原帖由 "Go_To_CU"]对,这个特殊元素不好弄,难道就没有别的操作方式了吗?[/quote 发表:



我前面已经解释了,这并不是一个“特殊”的元素,而仅仅是满足你的查找
条件的任意一个元素!这个想法的代价仅仅是在定义数组的时候留出来的一个
多余的位置以及由此产生的你心里的一点“别扭”。。。呵呵
作者: Go_To_CU    时间: 2005-09-18 13:24
标题: 如何提高查找速度
如果这个函数是用来检测随便一段内存的值的函数呢?不能增加这样的元素来终止循环,那样会修改内存的值的
作者: mik    时间: 2005-09-18 13:26
标题: 如何提高查找速度
[quote]原帖由 "mq110"]常规的查找吧. 按4 bytes[/quote 发表:



如果,确定数组较大的。那么可以按 6 bytes 查、8 bytes

甚至更多。。。

这样是否更快。
作者: 雨丝风片    时间: 2005-09-18 13:27
标题: 如何提高查找速度
[quote]原帖由 "Go_To_CU"]如果这个函数是用来检测随便一段内存的值的函数呢?不能增加这样的元素来终止循环,那样会修改内存的值的[/quote 发表:


我只能说,对于你的这个条件来说,那个方法不适用,
任何方法都是有前提的,而那个方法的前提就是你有权利来安排一个
“多余”空间。 :wink:
作者: Go_To_CU    时间: 2005-09-18 13:29
标题: 如何提高查找速度
感谢各位的参与,其实我这段函数主要是用来检测内存是否为空的
作者: mq110    时间: 2005-09-18 13:30
标题: 如何提高查找速度
原帖由 "mik" 发表:



如果,确定数组较大的。那么可以按 6 bytes 查、8 bytes

甚至更多。。。

这样是否更快。


我想不是这样的... 32位机来说 按4bytes 应该是最快的. 个人理解.如不对请指教.
作者: mik    时间: 2005-09-18 13:40
标题: 如何提高查找速度
原帖由 "mq110" 发表:


我想不是这样的... 32位机来说 按4bytes 应该是最快的. 个人理解.如不对请指教.



但是,按 8 bytes 来查,明明是比 4 bytes 省了一半的时间嘛。

而且,在 gcc 中,编译器缺省对齐是 16 bytes 上。

  1. andl $-16, esp
复制代码

作者: 雨丝风片    时间: 2005-09-18 13:49
标题: 如何提高查找速度
[quote]原帖由 "mik"]但是,按 8 bytes 来查,明明是比 4 bytes 省了一半的时间嘛。 [/quote 发表:


你在32位的机器上去判断一个64位的区域是否为空,请问你是如何
“比 4 bytes 省了一半的时间嘛”? :wink:
作者: mq110    时间: 2005-09-18 13:54
标题: 如何提高查找速度
同时处理32位2进制数. 怎么会8bytes 比4bytes 节省一半时间???不解.
作者: mik    时间: 2005-09-18 14:26
标题: 如何提高查找速度
原帖由 "雨丝风片" 发表:


你在32位的机器上去判断一个64位的区域是否为空,请问你是如何
“比 4 bytes 省了一半的时间嘛”? :wink:



嘿~~~

int main()
{
     int a[] = { 0, 1};
     int *p = a;

     if (*(long long*)p)
        printf("long long size is %d,%d\n"  a[1]);

     *(long long*)p = 0;
    if (!*(long long*)p)
        printf("long long size is %d,%d\n" a[1]);

    return 0;

}


你们试一试,结果如何??? 
作者: mq110    时间: 2005-09-18 14:30
标题: 如何提高查找速度
这能说明效率问题?
作者: mik    时间: 2005-09-18 14:47
标题: 如何提高查找速度
[quote]原帖由 "mq110"]这能说明效率问题?[/quote 发表:

  1. int main()
  2. {
  3.       int a[] = { 0, 1 };
  4.       int *p = a;

  5.      *p = 0;
  6.      *(p+1) = 0;
  7.   
  8.      if ( !*p && !*(p+1))
  9.          printf("%d\n",a[1]);
  10. }
复制代码

gcc 3.3.1 编译为:

  1.         leal        -8(%ebp), %eax
  2.         movl        %eax, -12(%ebp)
  3.         movl        -12(%ebp), %eax
  4.         movl        $0, (%eax)
  5.         movl        -12(%ebp), %eax
  6.         addl        $4, %eax
  7.         movl        $0, (%eax)
  8.         movl        -12(%ebp), %eax
  9.         cmpl        $0, (%eax)
  10.         jne        .L2
  11.         movl        -12(%ebp), %eax
  12.         addl        $4, %eax
  13.         cmpl        $0, (%eax)
  14.         jne        .L2
  15.         movl        -4(%ebp), %eax
  16.         movl        %eax, 4(%esp)
  17.         movl        $.LC0, (%esp)
  18.         call        printf
  19. .L2:
  20.         movl        $0, %eax
  21.         leave
复制代码



而:
  1. int main()
  2. {
  3.     int a[] = { 0, 1};
  4.     int *p = a;

  5.      *(long long*)p = 0;
  6.    if (!*(long long*)p)
  7.        printf("long long size is %d,%d\n" a[1]);

  8.    return 0;
  9. }
复制代码

gcc 3.3.1编译为:
  1.         leal        -8(%ebp), %eax
  2.         movl        %eax, -12(%ebp)
  3.         movl        -12(%ebp), %eax
  4.         movl        $0, (%eax)
  5.         movl        $0, 4(%eax)
  6.         movl        -12(%ebp), %eax
  7.         cmpl        $0, (%eax)
  8.         jne        .L2
  9.         movl        -4(%ebp), %eax
  10.         movl        %eax, 4(%esp)
  11.         movl        $.LC0, (%esp)
  12.         call        printf
  13. .L2:
  14.         movl        $0, %eax
  15.         leave
复制代码



用事实说话,不用解释了,对比一下:)

不过是未在优化编译的。 不知优化编译后,是否一样。。。
作者: mik    时间: 2005-09-18 15:00
标题: 如何提高查找速度
将两段代码用优化 -O 编译了。

产生代码是差不多。

:)
作者: win_hate    时间: 2005-09-18 21:35
标题: 如何提高查找速度
原帖由 "mik" 发表:


用事实说话,不用解释了,对比一下:)

不过是未在优化编译的。 不知优化编译后,是否一样。。。

  1. int main()
  2. {
  3.    int a[] = { 0, 1};
  4.    int *p = a;

  5.     *(long long*)p = 0;
  6.   if (!*(long long*)p)
  7.       printf("long long size is %d,%d\n" a[1]);

  8.   return 0;
  9. }
复制代码



这段汇编是 gcc 生成的吗?

  1.    leal   -8(%ebp), %eax            
  2.    movl   %eax, -12(%ebp)          # p = a
  3.    movl   -12(%ebp), %eax         
  4.    movl   $0, (%eax)
  5.    movl   $0, 4(%eax)              # *(long long *)p = 0
  6.    movl   -12(%ebp), %eax          # eax <-- p, or a
  7.    cmpl   $0, (%eax)               # a[0] == 0   ??? where is a[1]
  8.    jne   .L2
  9.    movl   -4(%ebp), %eax
  10.    movl   %eax, 4(%esp)
  11.    movl   $.LC0, (%esp)
  12.    call   printf
  13. .L2:
  14.    movl   $0, %eax
  15.    leave
复制代码

作者: win_hate    时间: 2005-09-18 21:43
标题: 如何提高查找速度
同样的c代码(虽然没看明白你在干什么),gcc 3.3.5 生成:

  1. main:
  2.         pushl   %ebp
  3.         movl    %esp, %ebp
  4.         subl    $24, %esp
  5.         andl    $-16, %esp
  6.         movl    $0, %eax
  7.         subl    %eax, %esp
  8.         movl    $0, -8(%ebp)
  9.         movl    $1, -4(%ebp)
  10.         leal    -8(%ebp), %eax
  11.         movl    %eax, -12(%ebp)
  12.         movl    -12(%ebp), %edx
  13.         movl    (%edx), %eax             # eax <-- a
  14.         orl     4(%edx), %eax            # eax <-- a[0] | a[1]
  15.         testl   %eax, %eax
  16.         jne     .L2
  17.         movl    -4(%ebp), %eax
  18.         movl    %eax, 4(%esp)
  19.         movl    $.LC0, (%esp)
  20.         call    printf
  21. .L2:
  22.         movl    $0, %eax
  23.         leave
  24.         ret
复制代码


a[1] 和 a[2] 都处理了。

关键是如何处理这个逻辑表达式
  1. (!*(long long*)p)
复制代码

!a 应该把 a 转换为 int 还是......

不清楚标准上是怎么写的。

ps>; 我好象又记起了一些东西

如果 typeof(a) 是 long long, 那么 !a 被转换为 !(a==0), long long 与long long 的比较。所以不处理 a[1] 的代码是错误的。
作者: win_hate    时间: 2005-09-18 21:49
标题: 如何提高查找速度
我赞成 雨丝 和 mq110 的观点, 在 32 位机上用 long long 并不能加速。此外 雨丝 提出的方法不依赖于具体的语言和硬件,是很好的方法。加进去的元素一般叫什么``哨兵'' 吧,记不清楚了。
作者: Arghawk    时间: 2005-09-18 22:50
标题: 如何提高查找速度
3楼的想法必须基于一个假设就是超越该数组边界的内存中必存在不等于0的,倘若超过数组边界后的很长一段内存都为0,岂不是又白白浪费一段时间啊。
作者: 雨丝风片    时间: 2005-09-19 07:52
标题: 如何提高查找速度
[quote]原帖由 "Arghawk"]3楼的想法必须基于一个假设就是超越该数组边界的内存中必存在不等于0的,倘若超过数组边界后的很长一段内存都为0,岂不是又白白浪费一段时间啊。[/quote 发表:


呵呵,请再看看我前面的解释。超过数组边界之后的内存到底有多长一段是0
已经不重要了,关键是你已经进入了雷区,随时都有可能因内存非法访问而
出错,这个方法的思路和限制也请见前述。

在Donald E.Knuth的TAOCP的第三卷的第6.1节Sequential Searching
中讲到了顺序查找算法,同时也给出了对顺序查找的优化思路,即
Quick sequential search和Quicker sequential search,可以参考一下。
作者: bleem1998    时间: 2005-09-19 08:53
标题: 如何提高查找速度
偶用memcmp行不
作者: 雨丝风片    时间: 2005-09-19 09:13
标题: 如何提高查找速度
[quote]原帖由 "bleem1998"]偶用memcmp行不[/quote 发表:


我们讨论的是memcmp的源代码,
作者: bleem1998    时间: 2005-09-19 09:17
标题: 如何提高查找速度

你们继续
在下旁观
作者: mq110    时间: 2005-09-19 12:09
标题: 如何提高查找速度
原帖由 "雨丝风片" 发表:
我说过要“稍微修改一下”嘛,当然要做边界保护的,
比如说,可能要在数组的边界上放一个“多余”的元素。


这个方法还是不错的.
通过雨丝风片的方法.
可以这样改进将最快.
先判断最后一个元素是不是0.
如果是0的话 将最后一个元素赋值为1.

然后开始从头 按雨丝风片 所说的方法来做.
这样保证即使全是0到最后肯定不会越界.
作者: 雨丝风片    时间: 2005-09-19 12:24
标题: 如何提高查找速度
原帖由 "mq110" 发表:


这个方法还是不错的.
通过雨丝风片的方法.
可以这样改进将最快.
先判断最后一个元素是不是0.
如果是0的话 将最后一个元素赋值为1.

然后开始从头 按雨丝风片 所说的方法来做.
这样保证即使全是0到最后肯定..........


不错,这样可以在不用另外增加一个元素的空间,只不过这是一种
破坏性的查找, ,查完了之后别忘了消灭作案痕迹,把最后一个
元素恢复原值才好。
作者: mq110    时间: 2005-09-19 12:26
标题: 如何提高查找速度
原帖由 "雨丝风片" 发表:


不错,这样可以在不用另外增加一个元素的空间,只不过这是一种
破坏性的查找, ,查完了之后别忘了消灭作案痕迹,把最后一个
元素恢复原值才好。


你的思想总是十分的开阔. 每次都让我有耳目一新的感觉.
呵呵 学习.
作者: 圆点坐标    时间: 2005-09-19 12:38
标题: 如何提高查找速度
获益匪浅,不错
作者: 雨丝风片    时间: 2005-09-19 12:43
标题: 如何提高查找速度
原帖由 "mq110" 发表:


你的思想总是十分的开阔. 每次都让我有耳目一新的感觉.
呵呵 学习.


在下也着实对兄台仰慕得紧啊!

才来cu不久,已经被这里的高手们的招数弄得头晕目眩了,
这里永远都不缺乏值得自己学习的东西,我也继续学习ing!
作者: yzc2002    时间: 2005-09-19 12:54
标题: 如何提高查找速度
不能修改最后一个的值,这个串一般是个const的
(1)串长可能为0
(2)如果是个字符串常量,这个修改可能会造成core dump
(3)如果这个串是静态的,则是线程不安全的,存在溢出的风险
作者: bleem1998    时间: 2005-09-19 12:58
标题: 如何提高查找速度
咱家也写了一个
思路参考前面某些人的讨论
array前面的大部分都用int来判断
剩下的不足一个int长的就用char来判断

  1. #include "../my.h"
  2. int empty_array(char *array, int size)
  3. {
  4.         int num = size / 4, i;
  5.         int *p = (int *)array;
  6.         for(i = 0; i < num; i++) {//用32位来判断
  7.                 if (*p++ != 0)
  8.                         return 0;
  9.         }
  10.         num = size - num * 4;
  11.         for(i = 0; i < num; i++) {//最后的尾巴用char来判断
  12.                 if (*array != '\0')
  13.                         return 0;
  14.         }
  15.         return 1;
  16. }

  17. int main()
  18. {
  19.         char buf[99];
  20.         bzero(buf, 99);
  21.         //buf[60] = 'a';
  22.         printf("buf is%s a empty array!!\n",
  23.                empty_array(&(buf[0]), sizeof(buf))?"":" not");

  24.         return 0;
  25. }
复制代码

作者: renstone921    时间: 2005-09-19 13:03
标题: 如何提高查找速度
num = size - num * 4;
换成
num %= sizeof(int);
作者: bleem1998    时间: 2005-09-19 13:09
标题: 如何提高查找速度
你的意思是num = size % sizeof(int)吧

作者: renstone921    时间: 2005-09-19 13:16
标题: 如何提高查找速度
对,写错了。只不过是想用求余运算。
作者: mq110    时间: 2005-09-19 13:37
标题: 如何提高查找速度
原帖由 "yzc2002" 发表:
不能修改最后一个的值,这个串一般是个const的
(1)串长可能为0
(2)如果是个字符串常量,这个修改可能会造成core dump
(3)如果这个串是静态的,则是线程不安全的,存在溢出的风险


如果是const修饰的串不适合采取修改的办法.

至于长度是0.应该在程序中判断. 总不至于出现你说的问题.
作者: mik    时间: 2005-09-19 16:42
标题: 如何提高查找速度
[quote]原帖由 "win_hate"][/quote 发表:


那段代码是用 gcc 3.3.1 生成的,这无用置疑! 我也不会做什么手脚!

至于,它什么只会比较 a[0] != 0 而不比较 a[1] != 0
我只能推测这是它一个比较智能的方面。可能是:代码分别将 a[0] 与 a[1]
置为0,故比较 a[0]。当然这只是推测。或许,这是个 BUG 也有这个可能性。
作者: converse    时间: 2009-04-10 16:36
  1. #include <stdio.h>

  2. int empty_array(char *array, int size)
  3. {
  4.         unsigned long *p = (unsigned long*)array;
  5.         int n = sizeof(unsigned long) / sizeof(char);
  6.         unsigned long mask = 1UL;

  7.         for (; (char*)p < array + size - n; p++)
  8.         {
  9.                 if (*p && mask)
  10.                 {
  11.                         return 0;
  12.                 }
  13.         }

  14.         char *tmp;
  15.         for (tmp = array + size - n; tmp < array + size; ++tmp)
  16.         {
  17.                 if (*tmp)
  18.                         return 0;
  19.         }

  20.         return 1;
  21. }

  22. int main()
  23. {
  24.         char buffer[1024] = {0};

  25.         printf("empty = %d\n", empty_array(buffer, 1024));

  26.         buffer[1] = 1;
  27.         printf("empty = %d\n", empty_array(buffer, 1024));

  28.         return 0;
  29. }
复制代码

作者: converse    时间: 2009-04-10 16:45
今天才看到,雨兄的思路确实挺好.

我最后贴出来的那个代码嘛,大家就看看就得了...


作者: astezheng    时间: 2009-04-10 19:05
原帖由 Go_To_CU 于 2005-9-18 13:29 发表
感谢各位的参与,其实我这段函数主要是用来检测内存是否为空的



long long *p = array

然后控制好边界,迭代

然后判断*p是否为零,变成8字节/迭代

结贴吧




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2