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

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

void *memcpy( void * restrict dest , const void * restrict src, size_t n) 

  这里给出一个它的使用例子:

#include <stdio.h>

int main()
{

        short* __restrict__ ptest = (short*)malloc(16*sizeof(short));
        char* __restrict__ ctest = (char*)malloc(32*sizeof(char));

        for(int icnt =0 ; icnt < 32; icnt++)
        {
                ctest[icnt] = 0x55;
        }

        memcpy((unsigned int)ptest + 0,(unsigned int)ctest, 16);

        for(int cnt =0 ; cnt < 8; cnt++)
        {
                printf("cnt:%d data:%d \n",cnt,(unsigned int)ptest[cnt]);
        }

        printf("size:%d",sizeof(unsigned int));

        free(ptest);
        free(ctest);

        return 0;
}
~    

参考文档:

https://www.jb51.net/article/35607.htm

https://blog.csdn.net/u010129119/article/details/52789618

原文地址:https://www.cnblogs.com/dylancao/p/9732772.html

时间: 2024-10-10 11:01:44

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

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

C99中新增加了restrict修饰的指针:由restrict修饰的指针是最初唯一对指针所指向的对象进行存取的方法,仅当第二个指针基于第一个时,才能对对象进行存取.对对象的存取都限定于基于由restrict修饰的指针表达式中. 由restrict修饰的指针主要用于函数形参,或指向由malloc()分配的内存空间.restrict数据类型不改变程序的语义.编译器能通过作出restrict修饰的指针是存取对象的唯一方法的假设,更好地优化某些类型的例程. [典型例子] memcpy()在C99中,re

黑 马 程 序 员_视频学习总结&lt;c语言&gt;----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语言void关键字的深刻含义

C语言void关键字的深刻含义 1.概述 本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧. 2.void的含义 void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据. void几乎只有“注释”和限制程序的作用,因为从来没有人会定义一个void变量,让我们试着来定义: void a; 这行语句编译时会出错,提示“illegal use of type 'void'”.不过,即使void a的编译不会出错,它也

Objective-C关键字和概念

Objective-C关键字和概念 @ 看到这个关键字,我们就应该想到,这是Object-C对C语言的扩展,例如@interface XXX. @interface 声明类 @implementation 实现类 @protocol 声明协议 @optional 与@protocol配合使用,说明协议中的某个或者某几个方法可以不实现 @required 与@protocol配合使用,说明协议中的某个方法或者某几个方法必须实现 @end 与@interface ,@implementation,@

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

c语言const关键字

作者:沉默羔羊 c语言const关键字: --  特点. 使用该关键修饰的变量不能被改变.      --指针常量. demo:   const char *p或者是 char const * p --常量指针. demo: char * const p      --常量指针和指针常量. 1.常量指针指的是如 char * const p, p是一个常量,p不能改变指向. 2.指针常量指的是如char const *p,   p指向一个字符常量,p可以改变指向.但是不能改变*p. --对于常量

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

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

&lt;&lt;黑马程序员&gt;&gt; C语言的关键字、标示符和注释

C语言的关键字 c语言总共提供了32个关键字: 特点: ①  C语言的关键字全部为小写字母. ②  关键字在开发工具或者智能文本编辑工具中会显示特殊颜色的字体,默认情况下,C语言                 的关键字在Xcode中都会显示紫褐色. C语言的关键字最主要的有 : int . return.  C语言的标示符 1 什么是标示符 C语言的标示符就是在程序中自定义的一些符号和名称,要跟我们的关键字区分开,关键字是C语言提供的符号,标示符是程序员自己定义的. 2 标示符的命名规则(必须

c语言输入输出缓冲区的概念

语言输入输出缓冲区的概念 你肯定会奇怪为什么一开始先说这个,一开始不都是数据类型什么的嘛,这个写在最前面因为后面的程序即使最简单的code都会用到输入输出,输出比较简单,可以放在后面再说,但是输入就不同了,如果不先了解一下,可能会得到和你预想不同的结果哦^_^.也正是由于和一般的c语言介绍方式不同,为了看起来正规一些,我就把这章叫做chapter0了,完全可以先跳过去,直接看chapter1. 1.getchar 先引用一下前人的成果(有修改)^_^:http://blog.csdn.net/c