c语言的,三个工具可以使编译器生成性能更佳的代码。
内联函数声明inline
函数有时可以非常短。短函数的每次调用可以用实现该函数功能的内联代码替代,以提高执行性能。意味着不需要给函数传递或返回一个值,要让编译器采用这种技术,可以把短函数指定为inline。
inline double bmi(double kg_wt,bouble m_height)//但一般不保证编译器能识别声明为inline的函数,因为该关键字对于
//编译器来说只是一个提示。
{
return kg_wt/(m_height*m_height);
}
使用restrict关键字
每个指针引用的数据项都没有在给定范围内以其它方式引用。关键字restrict就告诉编译器,何时出现这种情况,并且应用代码优化功能。(专业的C编译器可以优化对象代码的性能,这涉及到改变在代码中为操作指定的计算顺序。)
在<string.h>中声明的函数
errno_t strcpy(char *restricr s1,rsize_t slmax,const char * restrict s2)
{//implementation of the function to copy s2 to s1
}
这个函数将s2复制到s1中,关键字restrict 应用于两个指针参数,表示在函数体中,s1和s2引用的字符串仅通过这两个指针引用,所以编译器可以优化为该函数生成的代码。关键字restrict仅将信息告知编译器,但不保证进行优化。当然,如果在条件不具备的代码上应用了关键字restrict,代码就会生成不正确的结果。
在大多数情况下,不需要使用关键字restrict,只有代码进行大量计算,进行代码优化才有显著的效果,而这些还取决于编译器。
_Noreturn函数限定符
有时,实现的函数永远都不返回。例如,可以定义一个函数,在程序正常终止时调用。这种函数不会返回,因为控制权会像通常那样返回给调用者,此时,可以告诉编译器,该函数不返回。
_Noreturn void EndAll(void)
{
//Tidy up open files…
exit(EXIT_SUCCESS);
}
_Noreturn限定符告诉编译器,这个函数不返回给其调用函数,因为该函数不返回,所以唯一可用的返回类型是void 。知道一个函数永远都不返回,编译器就可以省略把控制权返回到调用点所需的代码和存储空间。stdnoreturn.h头文件定义了宏noreturn,它扩展为_Noreturn,所以只要在源文件中包含这个头文件,就可以使用noreturn。
摘自C语言经典入门
c语言的,三个工具可以使编译器生成性能更佳的代码。的更多相关文章
- C#调用脚本语言(三)-- IronJS 与 IronLua 简单方法性能比较
1. 测试环境 1.1. 硬件环境 CPU:intel Core i7-740QM 内存:8GDDR3 Memory 1.2. 系统 系统:Windows 8 Enterprise 开发工具:Vs ...
- C语言 第三章 关系、逻辑运算与分支流程控制
目录 一.关系运算 二.逻辑运算 三.运算优先级 四.if语句 4.0.代码块 4.1.单if语句 4.2.if else 4.3.多重if 4.4.?号:号表达式 五.switch语句 一.关系运算 ...
- C#6.0语言规范(三) 基本概念
应用程序启动 具有入口点的程序集称为应用程序.运行应用程序时,会创建一个新的应用程序域.应用程序的几个不同实例可以同时存在于同一台机器上,并且每个实例都有自己的应用程序域. 应用程序域通过充当应用程序 ...
- Swift语言指南(三)--语言基础之整数和浮点数
原文:Swift语言指南(三)--语言基础之整数和浮点数 整数 整数指没有小数的整数,如42,-23.整数可以是有符号的(正数,零,负数),也可以是无符号的(正数,零). Swift提供了8,16,3 ...
- ASP.NET MVC:多语言的三种技术处理策略
ASP.NET MVC:多语言的三种技术处理策略 背景 本文介绍了多语言的三种技术处理策略,每种策略对应一种场景,这三种场景是: 多语言资源信息只被.NET使用. 多语言资源信息只被Javascrip ...
- 基于C#程序设计语言的三种组合算法
目录 基于C#程序设计语言的三种组合算法 1. 总体思路 1.1 前言 1.2 算法思路 1.3 算法需要注意的点 2. 三种组合算法 2.1 普通组合算法 2.2 与自身进行组合的组合算法 2.3 ...
- MySQL基准测试(三)--开源工具与实例演示
MySQL基准测试(三)--开源工具与实例演示 针对web应用 ab ab是一个Apache HTTP服务的基准测试工具. http_load http_load是一个针对Web服务器测试工具. JM ...
- UWP 多语言的三个概念
首先了解一下 RFC4646 和 BCP-47 是什么东西: RFC4646 The name is a combination of an ISO 639 two-letter lowercase ...
- C语言--第三次作业
要求一 . 1)C高级第三次PTA作业(1) 题目6-1 1.设计思路 (1)主要描述题目算法 第一步:将月份分别赋值: 第二步:利用switch语句,输 ...
随机推荐
- 技巧收集-M1709
2017.09 在macOS中直接复制文件路径,在Finder中选中文件,按下快捷键:Command + Option + C *** 以KB,MB,GB方式显示文件大小 ls -lh 删除超大文本文 ...
- Java对象克隆详解
原文:http://www.cnblogs.com/Qian123/p/5710533.html 假如说你想复制一个简单变量.很简单: int apples = 5; int pears = appl ...
- nmap扫描某段网络连通性
nmap -v -sP 10.0.10.0/24 进行ping扫描,打印出对扫描做出响应的主机,不做进一步测试(如端口扫描或者操作系统探测): nmap -sP 192.168.1.0/24 仅列出指 ...
- 我的第一个python web开发框架(1)——前言
由于之前经验不是很丰富,写的C#系统太过复杂,所以一直想重写,但学的越多越觉得自己懂的越少,越觉的底气不足.所以一直不敢动手,在内心深处对自己讲,要静下心来认真学习,继续沉淀沉淀.这两年多以来找各种机 ...
- 数据分析前戏:ipython使用技巧(上)
不一定非得使用Jupyter Notebook,试试ipython命令行 安装 ipython 我只试过Windows 10环境下的. 1.安装python安装包之后,应该就有ipython了. 2. ...
- 统计学习方法——CART, Bagging, Random Forest, Boosting
本文从统计学角度讲解了CART(Classification And Regression Tree), Bagging(bootstrap aggregation), Random Forest B ...
- java中类之间的关系之封装、继承与多态的几个例子
例子1 1.编写一个Java应用程序,该程序包括3个类:Monkey类.People类和测试类.要求: (1)Monkey类中有个public void speak()方法,在speak方法中输出&q ...
- 英特尔:不再公布PC处理器多核睿频数据
据了解,以往英特尔官方有三个频率数据:基础主频:Turbo 2.0(多核)频率:以及Turbo 3.0(单核)频率.现在被隐匿的则是Turbo 2.0(多核)频率. 对此,英特尔在回应媒体时表示,给出 ...
- Android UI 笔记
EditText中添加小图标 <TextView android:layout_width="wrap_content" android:layout_height=&quo ...
- FPGA在AD采集中的应用
AD转换,也叫模数转换,是将模拟信号转换为数字信号.目前包括电脑CPU,ARM,FPGA,处理的信号都只能是数字信号,所以数据信号在进入处理芯片前必须要进行AD转换. 在高速的AD转换中,FPGA以其 ...