1. 程式人生 > >C/C++自動變數和靜態變數的初始化(這是筆記,不官方)

C/C++自動變數和靜態變數的初始化(這是筆記,不官方)

陣列(向量)類似於標量的初始化方式取決於變數的儲存方式。儲存於自動儲存空間的變數在main函式執行之前已經完成初始化,這個動作是有連結器完成的,不需要程式執行指令去對其進行初始化。而這個初始化的內容不管是陣列還是普通變數初始化值均為0,在程式執行的之前這些內容和程式翻譯出的指令一同被載入到記憶體。因此這些初始化是在程式執行之前完成的。

然而對於自動變數,因為自動變數儲存於堆疊中,每一次進入到對應自動變數的作用域的時候其地址可能都不一樣,如果自動變數沒有初始化語句,此時自動變數是不會被初始化的,其值是不確定的。但是如果自動變數有初始化語句,則每次進入到相應的程式碼快的時候程式都會對其進行一次隱式的初始化,這會消耗時間和空間來執行。同理,如果這是一個數組,其初始化一樣會被分多次執行。若陣列很大這個執行消耗的資源是客觀的。因此定義資料的時候需要考慮這一因素。儘量避免在初始化的地方浪費太多的資源。慎重考慮對陣列的重複初始化是否值得,若否則應該將陣列宣告為靜態,這樣它可以在程式開始前只執行一次