C/C++こまごました知識整理(二)
3955 ワード
1、レジスタ変数
レジスタ変数はレジスタに格納され、キーワードregisterで定義され、レジスタ変数は関数にのみ定義され、アドレス記号「&」を取って操作することはできません.レジスタにあり、メモリには含まれていないため、アドレスがなく、レジスタ変数の数には制限があり、制限を超えた変数は自動変数に自動的に変換されます.その利点はスピードが速いことです.
2、volatile
volatileは変化、異変を表す.
コンパイラにこの変数の値を仮定しないで、使用するたびにこの変数の値を再読み込みするように伝えます.一般的には組み込み型の開発でよく見られるか、マルチスレッドでよく見られる.
ここで印刷した結果は
fun
コンパイラがコードを最適化しているため、mainは表示されません.
3、どのようにしてあるアドレスにポインタを向けるか
4、const volatile char* p = “aaa”;
上にはポインタpが指す内容が定値で、読み取り専用で、変化することはできませんが、volatileは彼が変わりやすいことを示しており、意外な変化を保証することはできません.
レジスタ変数はレジスタに格納され、キーワード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は彼が変わりやすいことを示しており、意外な変化を保証することはできません.