首页 > 代码库 > C/C++ restrict修饰符
C/C++ restrict修饰符
restrict是c99标准引入的,它只可以用于限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式.即它告诉编译器,所有修改该指针所指向内存中内容的操作都必须通过该指针来修改,而不能通过其它途径(其它变量或指针)来修改;这样做的好处是,能帮助编译器进行更好的优化代码,生成更有效率的汇编代码.如 int *restrict ptr, ptr 指向的内存单元只能被 ptr 访问到,任何同样指向这个内存单元的其他指针都是未定义的,直白点就是无效指针(野指针)。这个关键字只能在C99标准的C程序里使用,C++程序不支持,restrict的起源最早可以追溯到Fortran。
下面通过一段小代码来理解一下。
// // main.c // restrict // // Created by ChengChao on 14-9-27. // Copyright (c) 2014年 cc. All rights reserved. // #include <stdio.h> int main(int argc, const char * argv[]) { int arr[10]; //arr和par都可以访问arr指向的这块内存区域 int* par = arr; //使用了restrict操作符,意思是只有restar指针可以访问其指向的这块内存,其他指针再指向这块内存时也无法访问 int* restrict restar = (int *)malloc(10 * sizeof(int)); for (int n = 0; n < 10; n++) { //多个指针都修改了arr par[n] += 5; arr[n] *= 2; par[n] += 3; //编译器确定只有一个指针修改改内存,就会将下面两行代码优化为 restar[n] += 8 //这里可以看一下汇编代码,确实进行了此优化操作 restar[n] += 5; restar[n] += 3; } free(restar); return 0; }
C/C++ restrict修饰符
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。