Chinaunix首页 | 论坛 | 博客
  • 博客访问: 21153
  • 博文数量: 3
  • 博客积分: 130
  • 博客等级: 入伍新兵
  • 技术积分: 40
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-29 18:08
文章分类

全部博文(3)

文章存档

2009年(3)

我的朋友
最近访客

分类:

2009-09-16 19:34:56

  • C语言各种分支控制结构在汇编语言中的实现形式

1. IF--ELSE

t=条件表达式的值

if(t为真)

goto true;

执行语句2

goto done

true:

执行语句1

done:

  1. while循环

t=条件表达式的值

if(t为假)

goto done;

loop

执行语句

t=条件表达式的值

if(t为真)

goto loop

done:

  1. do...while循环

loop

执行语句

t=条件表达式的值

if(t为真)

goto loop

  1. for循环

for语句被翻译为一个while语句,不同的是在while前要加上初始化语句

循环初始化

while(条件表达式){

循环语句

递增语句

}

循环初始化

t=条件表达式的值

if(t为假)

goto done;

loop

循环语句

递增语句

t=条件表达式的值

if(t为真)

goto loop

done:


  • 控制结构的优化(编译器优化)

表达式优化:

  1. 使用移位计算代替乘法除法。(移位执行速度和加减法差不多)

  2. 常量折叠——将能够直接静态的计算出结果的表达式计算出来,提高程序的执行速度

  3. 使用数学公式

  4. xx+1 ==> x++ 可减少cpu执行周期数(减少一个访存周期)


分支优化:

  1. 将发生几率大的if语句放在前面

  2. 使用switch语句代替多项ifelseif


循环优化:

  1. 将循环内部不会改变的赋值语句放到循环外


  • 全局变量与局部变量

    • 全局变量初始值为0,存储在固定的存储区(内存数据段),程序执行过程中一直存在

    • 局部变量存储在内存堆栈中,不被初始化,其值为该内存区域原有的值。对于调用频繁的局部变量,编译器会自动将其存储到寄存器中。

      • 故在循环中,循环算子最好使用局部变量。

      • 使用register存储类别会被优先分配寄存器。


  • 函数的调用

    • 将参数压栈

    • 保存寄存器的值

    • 保存返回地址

    • 跳转到函数地址

      • 函数的调用其实是以时间换空间。故在使用函数的时候要考虑到是否必要。


  • Static的用处

    • static可用于文件间隐藏。

      • 全局static变量的使用范围缩小了,只能在当前文件中使用。通过一些操作性的函数来暴露该变量给外部文件,这样就可以实现封装和模块化设计。

      • 对于局部static变量,作用域不变,但其在整个函数生命期都存在。虽然使用全局变量效果一样,但这样会使其他函数无意间修改该变量。


  • C语言的符号解析

    • 不允许有多个符号定义(变量、函数)

    • 如果有一个符号定义和多个符号声明,选择被定义的符号

    • 如果有多个符号的声明,则任选一个作为符号的定义。



  • Printf参数问题:printf(“%d\n”); printf(“%s\n”);

    • 对于整形参数,自动把存储在format字符串后面的4个字节传入,作为整形变量

    • 对于字符串,将该4字节当作字符串地址,从内存中该地址读入数据,可能会发生段异常。


  • void*的意义

    • 有时编译器不清楚用户要把指针指向的内存做什么用途的时候,编译器将认为指向该内存的指针为任意类型,如malloc的返回值,返回void*以躲过编译器的类型检查。之后用户使用的时候在cast成相应的指针类型。

    • #define NULL (void *)0;


  • 调试开关——使用条件编译

    • #define DEBUG 1

#ifdef DEBUG

#define PRINT(str) printf(str);

#define PRINT!(str,arg); printf(str,arg);

#else

#define PRINT(str) ;

#define PRINT!(str,arg) ;;

#endif


  • restrict关键字

    • 表明指针x是指向这块区域的唯一指针。

阅读(1359) | 评论(0) | 转发(0) |
0

上一篇:键盘上所有快捷键(windows下)

下一篇:没有了

给主人留下些什么吧!~~