C/C++こまごました知識整理(二)

3955 ワード

1、レジスタ変数
レジスタ変数はレジスタに格納され、キーワードregisterで定義され、レジスタ変数は関数にのみ定義され、アドレス記号「&」を取って操作することはできません.レジスタにあり、メモリには含まれていないため、アドレスがなく、レジスタ変数の数には制限があり、制限を超えた変数は自動変数に自動的に変換されます.その利点はスピードが速いことです.
2、volatile
volatileは変化、異変を表す.
コンパイラにこの変数の値を仮定しないで、使用するたびにこの変数の値を再読み込みするように伝えます.一般的には組み込み型の開発でよく見られるか、マルチスレッドでよく見られる.
 1 int i = 0;

 2 void fun(LPVOID p)

 3 {

 4     i = 3;

 5     cout<<"fun"<<endl;

 6 }

 7 int _tmain(int argc, _TCHAR* argv[])

 8 {

 9      HANDLE hThread = CreateThread(

10            NULL, // default security attributes

11              0, // use default stack size

12                fun, // thread function

13                  NULL, // argument to thread function

14                    0, // use default creation flags

15                      &dwThreadId[i]); // returns the thread identifier

16 

17      i = 2;

18      while(i == 2)

19      {

20 

21      }

22      cout<<"main"<<endl;

23 }

ここで印刷した結果は
fun
コンパイラがコードを最適化しているため、mainは表示されません.
while(i == 2)    while(1),        。

i volatile, 。


3、どのようにしてあるアドレスにポインタを向けるか
int * ppn=0;
ppn = (int *) 0x577a80 ;

 
4、const volatile char* p = “aaa”;
上にはポインタpが指す内容が定値で、読み取り専用で、変化することはできませんが、volatileは彼が変わりやすいことを示しており、意外な変化を保証することはできません.