程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> _Obj* __STL_VOLATILE* __my_free_list,_obj__stl_volatile

_Obj* __STL_VOLATILE* __my_free_list,_obj__stl_volatile

編輯:C++入門知識

_Obj* __STL_VOLATILE* __my_free_list,_obj__stl_volatile


今天在讀《STL源碼剖析》空間配置器第二級時看到了這句,有點不解,於是查閱後知:

obj後面是個指針 STL_VOLATILE也應該是個類型定義的吧,程序中應該有define來對它定義。所以就是指針的指針。。

指針,也就是地址,所以是__my_free_list是一個地址,*__my_free_list指向的是__my_free_list這個地址所在存儲區的變量值。而 __STL_VOLATILE* __my_free_list的值也是一個地址, *__STL_VOLATILE* __my_free_list所指向的是 __STL_VOLATILE* __my_free_list 這個地址所在存儲區的變量的值,也就是__my_free_list這個地址。

說的很繞,換個說法吧,比如__my_free_list用A來代替、__STL_VOLATILE* __my_free_list用B來代替。

那就是A是一個地址,B也是一個地址,A這個地址裡面存放的數據也是一個地址,索性管這個被存放的地址叫做C,那麼C這個地址所在存儲區存放的是一個變量,*A就是指向這個變量;

而B這個地址裡面存放的也是一個地址,這個地址裡面存放的還是一個地址,這個地址不是別人,就是A,*B就等於C(C是個A那個地址裡面所存放的數據)。

_Obj* __STL_VOLATILE* __my_free_list 怎理解? _obj是類型,後面的應該是一個指針?

嗯,是啊。obj後面是個指針 STL_VOLATILE也應該是個類型定義的吧,程序中應該有define來對它定義。所以就是指針的指針。。

指針,也就是地址,所以是__my_free_list是一個地址,*__my_free_list指向的是__my_free_list這個地址所在存儲區的變量值。而 __STL_VOLATILE* __my_free_list的值也是一個地址, *__STL_VOLATILE* __my_free_list所指向的是 __STL_VOLATILE* __my_free_list 這個地址所在存儲區的變量的值,也就是__my_free_list這個地址。

說的很繞,換個說法吧,比如__my_free_list用A來代替、__STL_VOLATILE* __my_free_list用B來代替。

那就是A是一個地址,B也是一個地址,A這個地址裡面存放的數據也是一個地址,索性管這個被存放的地址叫做C,那麼C這個地址所在存儲區存放的是一個變量,*A就是指向這個變量;

而B這個地址裡面存放的也是一個地址,這個地址裡面存放的還是一個地址,這個地址不是別人,就是A,*B就等於C(C是個A那個地址裡面所存放的數據)。

對於您這個問題我就是這樣理解的,說的也很繞,希望您看的懂哈。
 

#define outp_w(addr, dat) *(volatile UINT32*)(addr)=dat;

#define outp_w(addr, dat) *(volatile UINT32*)(addr)=dat;
相當與
#define outp_w(addr, dat) *((volatile UINT32*)addr)=dat;
(volatile UINT32*)addr 將addr轉變為異變型指針
*((volatile UINT32*)addr) 是修改指針所指的值
其實就是一個宏而已

volatile
volatile declarator

The volatile keyword is a type qualifier used to declare that an object can be modified in the program by something other than statements, such as the operating system, the hardware, or a concurrently executing thread.

The following example declares a volatile integer nVint whose value can be modified by external processes:

int volatile nVint;
Objects declared as volatile are not used in optimizations because their value can change at any time. The system always reads the current value of a volatile object at the point it is requested, even if the previous instruction asked for a value from the same object. Also, the value of the object is written immediately on assignment.

One use of the volatile qualifier is to provide access to memory locations used by asynchronous processes such as interrupt handlers.
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved