量的內存單元是編譯器在編譯時候分配的
阿新 • • 發佈:2017-07-05
表示 管理 負責 再看 額外 空間大小 動態申請 名稱 通過
所謂在編譯期間分配空間指的是靜態分配空間(相對於用new動態申請空間),如全局變量或靜態變量(包括一些復雜類型的常量),它們所需要的空間大小可以明確計算出來,
並且不會再改變,因此它們可以直接存放在可執行文件的特定的節裏(而且包含初始化的值),程序運行時也是直接將這個節加載到特定的段中,不必在程序運行期間用額外的代碼來產生這些變量。其實在運
行期間再看“變量”這個概念就不再具備編譯期間那麽多的屬性了(諸如名稱,類型,作用域,生存期等等),對應的只是一塊內存(只有首址和大小)
所以在運行期間動態申請的空間,是需要額外的代碼維護,以確保不同變量不會混用內存。比如寫new表示有一塊內存已經被占用了,其它變量就不能再用它了; 寫delete表示這塊內存自由了,可以被其它變量使用了。
(通常我們都是通過變量來使用內存的,就編碼而言變量是給內存塊起了個名字,用以區分彼此)
內存申請和釋放時機很重要,過早會丟失數據,過遲會耗費內存。特定情況下編譯器可以幫我們完成這項復雜的工作(增加額外的代碼維護內存空間,實現申請和釋 放)。
從這個意義上講,局部自動變量也是由編譯器負責分配空間的。進一步講,內存管理用到了我們常常掛在嘴邊的堆和棧這兩種數據結構最後對於“編譯器分配空間”這種不嚴謹的說法,
你可以理解成編譯期間它為你規劃好
量的內存單元是編譯器在編譯時候分配的