C语言restrict关键字的使用----可以用来优化代码

C99中新增加了restrict修饰的指针:由restrict修饰的指针是最初唯一对指针所指向的对象进行存取的方法,仅当第二个指针基于第一个时,才能对对象进行存取。对对象的存取都限定于基于由restrict修饰的指针表达式中。

由restrict修饰的指针主要用于函数形参,或指向由malloc()分配的内存空间。restrict数据类型不改变程序的语义。编译器能通过作出restrict修饰的指针是存取对象的唯一方法的假设,更好地优化某些类型的例程。

[典型例子]

memcpy()在C99中,restrict可明确用于memcpy()的原型,而在C89中必须进行解释。

void *memcpy(void *restrict str1, const void *restrict str2, size_t size);

/*通过使用restrict修饰str1和str2来保证它们指向不重叠的对象*/

http://www.cnblogs.com/Leon5/archive/2011/10/06/2199750.html

http://blog.csdn.net/swanabin/article/details/17915083 在vc2008中编译 会报错把restrict  改为__restrict就可以了

http://bdxnote.blog.163.com/blog/static/84442352010017185053/

时间: 2024-07-30 20:56:49

C语言restrict关键字的使用----可以用来优化代码的相关文章

C 语言restrict 关键字的概念及使用例子

restrict是c99标准引入的,它只可以用于限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式.即它告诉编译器,所有修改该指针所指向内存中内容的操作都必须通过该指针来修改,而不能通过其它途径(其它变量或指针)来修改;这样做的好处是,能帮助编译器进行更好的优化代码,生成更有效率的汇编代码. C语言核心技术上有对它的详细应用: void *memcpy( void * restrict dest , const void * restrict src, size_t n) 这里给出一

黑 马 程 序 员_视频学习总结<c语言>----01 关键字、标识符、注释、 常量、变量

---------------------- ASP.Net+Unity开发..Net培训.期待与您交流! ---------------------- 一.关键字 1.关键字就是C语言提供的有特殊含义的符号,有些地方也叫做“保留字”. 2.C语言一共提供了32个关键字,这些关键字都被C语言赋予了特殊含义. auto double int struct break else long switch case enum register typedef char extern return uni

C语言中关键字volatile的含义【转】

本文转载自:http://m.jb51.net/article/37489.htm 本篇文章是对C语言中关键字volatile的含义进行了详细的分析介绍,需要的朋友参考下 volatile 的意思是“易失的,易改变的”.这个限定词的含义是向编译器指明变量的内容可能会由于其他程序的修改而变化.通常在程序中申明了一个变量时,编译器会尽量把它存放在通用寄存器中,例如ebx.当CPU把其值放到ebx中后就不会再关心对应内存中的值.若此时其他程序(例如内核程序或一个中断)修改了内存中它的值,ebx中的值并

C语言之关键字

C语言随读笔记 2013.11.09 小雨 一. C语言的标示符与关键字 关键字:编程语言保留的特殊标示符,有时又称为保留字: 标示符:表示源程序中某个对象的名字,最长255个字符: 关键字分类 32个关键字每个都有不同的意义,大体上根据其意义可以分为以下几类(下划线表示不同分类中有交集): 1) 非常见:auto.register.volatile.goto 2) 存储相关:const.extern.register.volatile.static.auto.signed.unsigned 3

C语言volatile关键字

volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据.如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象.下面举例说明.在DSP开发中,经常需要等待某个事件的触发,所以经常会写出这样的程序: short flag; void test() { do1(); while(flag==0); do2(); } 这段程序等待内存

C语言中关键字auto、static、register、const、volatile、extern的作用

原文:C语言中关键字auto.static.register.const.volatile.extern的作用 关键字auto.static.register.const.volatile.extern 这些关键词都是c++基础知识,我整理了一下,希望对新学的朋友们有用: (1)auto 这个这个关键字用于声明变量的生存期为自动,即将不在任何类.结构.枚举.联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量.这个关键字不怎么多写,因为所有的变量默认就是auto的. (2)reg

【转】volatile关键字。编译器不优化,多线程会改。防止随时变动的

来自:http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777432.html 1. 为什么用volatile? C/C++ 中的 volatile 关键字和 const 对应,用来修饰变量,通常用于建立语言级别的 memory barrier.这是 BS 在 "The C++ Programming Language" 对 volatile 修饰词的说明: A volatile specifier is a hint to

[转]Restrict关键字

0 定义 C99中新增加的用于修饰指针的关键字,用于表示该指针所指向的内存,只有通过该指针访问得到(如下ptr指向的内存单元只能通过ptr访问得到).从而可以让编译器对代码进行优化,生成更有效率的汇编代码. char *restrict ptr; 1 优化举例 举例1,如下代码(引自参考1),以及翻译成汇编之后的代码. #include <stdio.h> #ifdefRES void multi_add(int* restrict p1, int* restrict p2, int* res

c99标准的restrict关键字

参考自restrict restrict关键字出现于C99标准,wiki上的解释restrict from wiki. In the C programming language, as of the C99 standard, restrict is a keyword that can be used in pointer declarations. The restrict keyword is a declaration of intent given by the programmer