關於 define 和const 的問題

2022-08-30 08:54:14 字數 825 閱讀 7150

小生在寫

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定義的常變數的作...