小生在寫
cuda
程式時遇到的乙個問題就是:
對#define
和const
有疑問到底哪個執行的速度更加快一些呢
?#define
一般來說用於
字串[string]
和數字的
替代,預設區分大小寫
我們將這個
# define
又稱做巨集
,所有叫做巨集的都有乙個特點就是,它是在預處理時的文字替換,替換了之後呢,相當於乙個變數,(當然,它和變數還有很大的區別的,因為它根本就不佔空間)
#define num 23
並不存在乙個和
num相關聯的空間
const
就是定義乙個變數,
它分配乙個空間,在編譯時如果有其它操作改變它,編譯器就不會同意的。度過編譯期,它就和普通的變數沒有任何區別了,也有自己的空間。
當然,如果經過編譯器優化的話,也許二者真就沒有什麼太大區別了。
所以,二者的區別主要在於,最後存放數字的空間不一樣的問題:
const
是分配乙個空間用
而define
是給某個值取乙個別名;
乙個是巨集的定義
而另個是常量的定義
有的人建議:
最好用const
定義常量,如
: const float pi=3.1415927
而不要用
: #define pi 3.1415927
正如上面所說
,分配的空間不同,但編譯器不回對此進行優化
.我自己還沒有實踐過,所以也不是很清楚。
關於const和define的記憶體分配問題的總結
1,const定義的唯讀變數在程式執行過程中只有乙份拷貝 因為它是全域性的唯讀變數,存放在靜態區 而 define定義的巨集常量在記憶體中有若干個拷貝。2,define巨集是在預編譯階段進行替換,而const修飾的唯讀變數是在編譯的時候確定其值。3,define巨集沒有型別,而const修飾的唯讀變...
const和define的區別
1 編譯器處理方式不同 define巨集是在預處理階段展開。const常量是編譯執行階段使用。2 型別和安全檢查不同 define巨集沒有型別,不做任何型別檢查,僅僅是展開。const常量有具體的型別,在編譯階段會執行型別檢查。3 儲存方式不同 define巨集僅僅是展開,有多少地方使用,就展開多少...
const和 define的區別
1 const定義的常量是有型別的,define定義的常量是沒有型別的 這就意味著會對前者做乙個型別的檢查,對 define則是做乙個簡單的替換 2 const定義的常量在編譯的時候分配記憶體,而 define定義的常量在預編譯的時候進行替換,不分配記憶體 3 作用域不同,const定義的常變數的作...