C/C++ for while性能简单分析
来源:互联网 发布:淘宝发帖怎么发求链接 编辑:程序博客网 时间:2024/05/24 04:31
今天看一个文章
<想成为嵌入式程序员应知道的0x10个基本问题>
其中有一个十这样写的:
<<<<<<<<<<<<<
4. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?
这个问题用几个解决方案。我首选的方案是:
while(1)
{
}
一些程序员更喜欢如下方案:
for(;;)
{
}
这个实现方式让我为难,因为这个语法没有确切表达到底怎么回事。如果一个应试者给出这个作为方案,我将用这个作为一个机会去探究他们这样做的基本原理。如果他们的基本答案是:"我被教着这样做,但从没有想到过为什么。"这会给我留下一个坏印象。
>>>>>>>>>>>>>>>>>>
其实我们一直偏向
for(;;)
{
}这样去写的。
因为直觉这样生成的汇编代码要简洁,为了验证自己想法写了简单的文件测试了下
//test_while.c:
int main()
{
while(1){}
}
//test_for.c:
int main()
{
for(;;){}
}
用cl /FA /c test_while.c test_for.c 命令可以在文件所在目录下生成test_while.asm test_for.asm的文件.
生成文件入下:
; Listing generated by Microsoft (R) Optimizing Compiler Version 15.00.30729.01
TITLE D:/test_for.c
.686P
.XMM
include listing.inc
.model flat
INCLUDELIB LIBCMT
INCLUDELIB OLDNAMES
PUBLIC _main
; Function compile flags: /Odtp
_TEXT SEGMENT
_main PROC
; File d:/test_for.c
; Line 2
push ebp
mov ebp, esp
$LN2@main:
; Line 3
jmp SHORT $LN2@main
; Line 4
pop ebp
ret 0
_main ENDP
_TEXT ENDS
END
; Listing generated by Microsoft (R) Optimizing Compiler Version 15.00.30729.01
TITLE D:/test_while.c
.686P
.XMM
include listing.inc
.model flat
INCLUDELIB LIBCMT
INCLUDELIB OLDNAMES
PUBLIC _main
; Function compile flags: /Odtp
_TEXT SEGMENT
_main PROC
; File d:/test_while.c
; Line 2
push ebp
mov ebp, esp
$LN2@main:
; Line 3
mov eax, 1
test eax, eax
je SHORT $LN3@main
jmp SHORT $LN2@main
$LN3@main:
; Line 4
pop ebp
ret 0
_main ENDP
_TEXT ENDS
END
注意上面asm文件Line 3和Line 4之间的代码,事实证明至少在VS中for生成的代码比while更加简洁。
- C/C++ for while性能简单分析
- while 語句(1) for C
- C语言基础 循环结构 while for
- C语言基础 switch、while、for循环
- 6.15C循环控制语句for while
- C for ios --- while break continue
- c语言中不用while,for,do-while实现循环
- Object-C,循环语句for,while,do-while
- 【C++】For、While、do···while循环
- 【C语言】"for" "while" "do……while"
- Mohican_12/12 C语言—循环 for ,while,do while
- 【C语言简单说】十五:while循环
- 【C语言】C语言中for、while和do while 比较
- Linux C程序性能分析
- 【C】do{}while、do{}while(false)、do{}while(__LINE__==-1)使用分析
- for、while、foreach性能比较
- foreach、while、for性能比较
- Do while 和for的区别 我们不一定懂C
- 用 Lucene 加速 Web 搜索应用程序的开发
- JavaScript窗口间传递参数学习一
- Linux USB驱动框架分析 上
- 类与类之间的关系(UML)zz
- 拖拽示例
- C/C++ for while性能简单分析
- Linux USB驱动框架分析 下
- 使用XmlSerializer的问题
- Swing之JTable的详细介绍[zone yan]
- 如何将字符串转换为相应的整型
- 上海交大公布全国保送生和优秀学生复试考点
- apache+weblogic 获取客户IP
- 1700 Daxia & Vge 's game
- 开发人员们,测试员们正在测试你们的耐心?