From ee9e1b00e55ee014c22724569c14bb5cddadb7e6 Mon Sep 17 00:00:00 2001 From: Menghui Xie Date: Wed, 20 Jun 2018 16:35:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BD=8D=E5=9F=9F=E3=80=81?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=20volatile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 0bbe348..891be10 100644 --- a/README.md +++ b/README.md @@ -90,17 +90,6 @@ int* const function7(); // 返回一个指向变量的常指针,使用:i -### volatile - -```cpp -volatile int i = 10; -``` - -* volatile 关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素(操作系统、硬件、其它线程等)更改。 -* volatile 关键字声明的变量,每次访问时都必须从内存中取出值(没有被 volatile 修饰的变量,可能由于编译器的优化,从 CPU 寄存器中取值) -* const 可以是 volatile (如只读的状态寄存器) -* 指针可以是 volatile - ### static #### 作用 @@ -150,7 +139,7 @@ inline int functionName(int first, int secend,...) {/****/}; -#### 编译器对inline函数的处理步骤 +#### 编译器对 inline 函数的处理步骤 1. 将 inline 函数体复制到 inline 函数调用点处; 2. 为所用 inline 函数中的局部变量分配内存空间; @@ -263,6 +252,29 @@ struct test +### 位域 + +```cpp +Bit mode: 2; // mode 占 2 位 +``` + +类可以将其(非静态)数据成员定义为位域(bit-field),在一个位域中含有一定数量的二进制位。当一个程序需要向其他程序或硬件设备传递二进制数据时,通常会用到位域。 + +* 位域在内存中的布局是与机器有关的 +* 位域的类型必须是整型或枚举类型,带符号类型中的位域的行为将因具体实现而定 +* 取地址运算符(&)不能作用于位域,任何指针都无法指向类的位域 + +### volatile + +```cpp +volatile int i = 10; +``` + +* volatile 关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素(操作系统、硬件、其它线程等)更改。所以使用 volatile 告诉编译器不应对这样的对象进行优化。 +* volatile 关键字声明的变量,每次访问时都必须从内存中取出值(没有被 volatile 修饰的变量,可能由于编译器的优化,从 CPU 寄存器中取值) +* const 可以是 volatile (如只读的状态寄存器) +* 指针可以是 volatile + ### extern "C" * 被 extern 限定的函数或变量是 extern 类型的