C/C++ 中的特殊关键字:volatile, register, restrict, __attribute__

1.volatile: 告诉编译器i是随时可能发生变化的,每次使用它的时候必须从i的地址(内存)中读取,而不会使用寄存器中的缓存值;

volatile int i=10; 

2.register: 使用修饰符register声明的变量属于寄存器存储类型。该类型与自动存储类型相似,具有自动存储时期、代码块作用域和内连接。声明为register仅仅是一个请求,因此该变量仍然可能是普通的自动变量。无论哪种情况,用register修饰的变量都无法获取地址。如果没有被初始化,它的值是未定的。

3.restrict:关键字restrict只用于限定指针;该关键字用于告知编译器,所有修改该指针所指向内容的操作全部都是基于(base on)该指针的,即不存在其它进行修改操作的途径;这样的后果是帮助编译器进行更好的代码优化,生成更有效率的汇编代码。

int *restrict x; //只会通过指针 x,对 x 中的值进行修改 

参考:http://blog.csdn.net/lovekatherine/article/details/1891806

4.__attribute__:可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。

extern void myexit() __attribute__((noreturn));//表示函数不存在返回值;编译不会再出现警告信息。

参考:http://blog.csdn.net/ruixj/article/details/4274721

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-05 00:47:56

C/C++ 中的特殊关键字:volatile, register, restrict, __attribute__的相关文章

C中的const,volatile与restrict

volatile表明某个变量的值可能在外部被改变,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份.它可以适用于基础类 型如:int,char,long......也适用于C的结构和C++的类.当对结构或者类对象使用volatile修饰的时候,结构或者类的所有成员 都会被视为volatile.该关键字在多线程环境下经常使用,因为在编写多线程的程序时,同一个变量可能被多个线程修改,而程序通过该变量同步各个线程.简单示例:DWORD __stdcall th

C++ 关键字 static register const volatile extern

C++ 关键字static,register,const,volatile,extern static 静态变量作用范围在一个文件内,程序开始时分配空间,结束时释放空间,默认初始化为 0,使用时可改变其值. 静态变量或静态函数,只有本文件内的代码才可访问它,它的名字(变量名或函数名) 在其他文件中不可见. 在函数体内生成的静态变量,它的值能够一直维持. 在C++类的成员变量被声明为static(称为静态成员变量),意味着它为该类的所有实例所 共享,也就是说当某个类的实例修改了该静态成员变量,其修

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

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

Java中关于原子操作和volatile关键字

Java中关于原子操作和volatile关键字 第一种:采用同步synchronized解决,这样虽然解决了问题,但是也降低了系统的性能. 第二种:采用原子性数据Atomic变量,这是从JDK1.5开始才存在的针对原子性的解决方案,这种方案也是目前比较好的解决方案了.

[CareerCup] 13.5 Volatile Keyword 关键字volatile

13.5 What is the significance of the keyword "volatile" in C 这道题考察我们对于关键字volatile的理解,顾名思义,volatile有易变的易挥发的意思,在C/C++里,表示告知编译器某个变量可能会由程序外部改变,比如操作系统,硬件或者其他的线程.由于变量会由无法预期的改变,所有编译器每次都需要从内存中读取变量值.我们可以如下定义一个整型变量为volatile: int volatile x; volatile int x

Java 并发 关键字volatile

Java 并发 关键字volatile @author ixenos volatile只是保证了共享变量的可见性,不保证同步操作的原子性 同步块 和 volatile 关键字机制 synchronized  同步块大家都比较熟悉,通过 synchronized 关键字来实现,所有加上synchronized 和 块语句,在多线程访问的时候,同一时刻只能有一个线程能够用synchronized 修饰的方法 或者 代码块. volatile 用volatile修饰的变量,线程在每次刚使用变量的时候,

c++中的const和volatile知识自我总结

学习了下c++中的const关键字,总结如下. 1.const限制一个变量不能修改其内容,如果强行修改的话,如下面代码这样子,编译就会报错,“表达式必须是可修改的左值”. int main() { const int a = 6; cout << a << endl; a = 10; cout << a << endl; return 0; } 2.如果通过指针强行修改呢,如下面代码这样子. int main() { const int a = 6; cou

Java并发关键字Volatile 详解

Java并发关键字Volatile 详解 问题引出: 1.Volatile是什么? 2.Volatile有哪些特性? 3.Volatile每个特性的底层实现原理是什么? 相关内容补充: 缓存一致性协议:MESI ? 由于计算机储存设备(硬盘等)的读写速度和CPU的计算速度有着几个数量级别的差距,为了不让CPU停下来等待读写,在CPU和存储设备之间加了高速缓存,每个CPU都有自己的高速缓存,而且他们共享同一个主内存区域,当他们都要同步到主内存时,如果每个CPU缓存里的数据都不一样,这时应该以哪个数

C++ 类模板三(类模版中的static关键字)

//类模版中的static关键字 #include<iostream> using namespace std; /* 类模板本质上是c++编译器根据类型参数创建了不同的类, c++编译器在利用类模板生成类的时候会为每个类生成一个static变量 那么对于类中的static关键字就非常好理解了 static关键字修饰的变量是属于类的 同一个类的对象共享类的static静态变量 类模板中的static修饰的变量数据类型必须是确定的 不可以是类型参数 因为静态变量在类对象之前初始化 这时候还没有通