if和switch的两个测试小程序,时间上的效率和空间上的占用!
来源:互联网 发布:实名制淘宝小号 编辑:程序博客网 时间:2024/05/17 01:32
在WindowsXP的Mingw下通过写了两个测试时间和空间的小程序,if和switch的对比,然后通过gcc编译出.s和.exe文件去执行。
--------------------------------------------------------------------------------------
1. switch.c
2. if.c
--------------------------------------------------------------------------------------
然后
gcc -S switch.c
生成switch.s
.file "table_s.c"
.def ___main; .scl 2; .type 32; .endef
.text
LC0:
.ascii "start:%ld/12/0"
LC1:
.ascii "value:%d/12/0"
LC2:
.ascii "time:%ld/12/0"
.globl _main
.def _main; .scl 2; .type 32; .endef
_main:
pushl %ebp
movl %esp, %ebp
subl $40, %esp
andl $-16, %esp
movl $0, %eax
movl %eax, -24(%ebp)
movl -24(%ebp), %eax
call __alloca
call ___main
movl $7, -4(%ebp)
movl $0, -8(%ebp)
call _GetTickCount@0
movl %eax, -12(%ebp)
movl -12(%ebp), %eax
movl %eax, 4(%esp)
movl $LC0, (%esp)
call _printf
movl $0, -20(%ebp)
L32:
cmpl $1342177278, -20(%ebp)
jle L35
jmp L33
L35:
cmpl $9, -4(%ebp)
ja L38
movl -4(%ebp), %eax
sall $2, %eax
movl L48(%eax), %eax
jmp *%eax
.p2align 2
.align 4
L48:
.long L38
.long L39
.long L40
.long L41
.long L42
.long L43
.long L44
.long L45
.long L46
.long L47
L38:
movl $0, -8(%ebp)
jmp L34
L39:
movl $1, -8(%ebp)
jmp L34
L40:
movl $2, -8(%ebp)
jmp L34
L41:
movl $3, -8(%ebp)
jmp L34
L42:
movl $4, -8(%ebp)
jmp L34
L43:
movl $5, -8(%ebp)
jmp L34
L44:
movl $6, -8(%ebp)
jmp L34
L45:
movl $7, -8(%ebp)
jmp L34
L46:
movl $8, -8(%ebp)
jmp L34
L47:
movl $9, -8(%ebp)
L34:
leal -20(%ebp), %eax
incl (%eax)
jmp L32
L33:
movl -8(%ebp), %eax
movl %eax, 4(%esp)
movl $LC1, (%esp)
call _printf
call _GetTickCount@0
subl -12(%ebp), %eax
movl %eax, -16(%ebp)
movl -16(%ebp), %eax
movl %eax, 4(%esp)
movl $LC2, (%esp)
call _printf
movl $0, %eax
leave
ret
.def _printf; .scl 2; .type 32; .endef
gcc -S if.c
生成if.s
.file "table_n.c"
.def ___main; .scl 2; .type 32; .endef
.text
LC0:
.ascii "start:%ld/12/0"
LC1:
.ascii "value:%d/12/0"
LC2:
.ascii "time:%ld/12/0"
.globl _main
.def _main; .scl 2; .type 32; .endef
_main:
pushl %ebp
movl %esp, %ebp
subl $104, %esp
andl $-16, %esp
movl $0, %eax
movl %eax, -88(%ebp)
movl -88(%ebp), %eax
call __alloca
call ___main
movl $7, -12(%ebp)
movl $0, -16(%ebp)
movl $0, -72(%ebp)
movl $1, -68(%ebp)
movl $2, -64(%ebp)
movl $3, -60(%ebp)
movl $4, -56(%ebp)
movl $5, -52(%ebp)
movl $6, -48(%ebp)
movl $7, -44(%ebp)
movl $8, -40(%ebp)
movl $9, -36(%ebp)
call _GetTickCount@0
movl %eax, -76(%ebp)
movl -76(%ebp), %eax
movl %eax, 4(%esp)
movl $LC0, (%esp)
call _printf
movl $0, -84(%ebp)
L32:
cmpl $1342177278, -84(%ebp)
jle L35
jmp L33
L35:
cmpl $0, -12(%ebp)
js L37
cmpl $9, -12(%ebp)
jg L37
jmp L36
L37:
movl $0, -12(%ebp)
L36:
movl -12(%ebp), %eax
movl -72(%ebp,%eax,4), %eax
movl %eax, -16(%ebp)
leal -84(%ebp), %eax
incl (%eax)
jmp L32
L33:
movl -16(%ebp), %eax
movl %eax, 4(%esp)
movl $LC1, (%esp)
call _printf
call _GetTickCount@0
subl -76(%ebp), %eax
movl %eax, -80(%ebp)
movl -80(%ebp), %eax
movl %eax, 4(%esp)
movl $LC2, (%esp)
call _printf
movl $0, %eax
leave
ret
.def _printf; .scl 2; .type 32; .endef
可以对比一下,if生成出来的代码要少一些。
--------------------------------------------------------------------------------------
然后生成.exe
gcc -o switch if.c
if >i.txt
start:36931265
value:7
time:5235
gcc -o switch switch.c
switch >s.txt
start:36951500
value:7
time:5375
我们可以把
#define TOTAL_TIME (0x4FFFFFFF)
这个值继续加大,然后可以察看两个.c文件执行所用的时间。
你是否也喜欢用table和if结合去实现呢?
- if和switch的两个测试小程序,时间上的效率和空间上的占用!
- if-else和switch的效率问题
- if else 和 switch的效率
- switch 和 if else的效率区别
- switch case 和 if else效率的比较
- PHP下switch-case 和 if-else效率的比较
- 关于if(){}else(){} 和 switch() case的执行效率
- switch-case和if-else的效率比较
- 关于switch和if else的效率问题
- switch case 和 if else 的区别及运行效率
- If-else和Switch效率测试
- 在Windows平台上测试程序的CPU使用率和内存占用量
- switch与if的效率
- if和switch的应用
- if和switch的区别
- IF和SWITCH的原理
- if和switch的区别
- if语句和switch语句 关于时间的三个问题
- socket关闭的close和shutdown区别
- GridView 批量删除,自定义分页,定位页码
- MVC项目在IIS6上部署的几种思路
- linux的filesystem repaier
- GPS-NMEA0183格式(wletv整理)
- if和switch的两个测试小程序,时间上的效率和空间上的占用!
- 正则表达式口诀及教程
- 回调函数...解释
- 企业级的JAVA解决方案
- Flex组件生命周期
- SSL窃听攻击实操
- Flex 自定义组件
- Jboss下报Unparseable date的临时解决方法
- 常用正则表达式整理