變數名被編譯器放內存
1. c語言中一個變數名在內存中是什麼樣子的
變數名是給編譯器看的,編譯器根據變數是局部還是全局分配內存地址或棧空間,所謂的變數名在內存中不存在,操作時轉換成地址數存放在寄存器中了。
2. c++中為什麼有些變數在編譯是就由編譯器分配了內存空間,還沒有運行怎麼會佔用內存呢
還沒有運行怎麼會佔用內存呢?!(這一點還要懷疑嗎!?)
所謂在編譯期間分配空間指的是靜態分配空間(相對於用new動態申請空間),如全局變數或靜態變數(包括一些復雜類型的常量),它們所需要的空間大小可以明確計算出來,並且不會再改變,因此它們可以直接存放在可執行文件的特定的節里(而且包含初始化的值),程序運行時也是直接將這個節載入到特定的段中,不必在程序運行期間用額外的代碼來產生這些變數。
其實在運行期間再看「變數」這個概念就不再具備編譯期間那麼多的屬性了(諸如名稱,類型,作用域,生存期等等),對應的只是一塊內存(只有首址和大小),所以在運行期間動態申請的空間,是需要額外的代碼維護,以確保不同變數不會混用內存。比如寫new表示有一塊內存已經被佔用了,其它變數就不能再用它了; 寫delete表示這塊內存自由了,可以被其它變數使用了。(通常我們都是通過變數來使用內存的,就編碼而言變數是給內存塊起了個名字,用以區分彼此)
內存申請和釋放時機很重要,過早會丟失數據,過遲會耗費內存。特定情況下編譯器可以幫我們完成這項復雜的工作(增加額外的代碼維護內存空間,實現申請和釋放)。從這個意義上講,局部自動變數也是由編譯器負責分配空間的。進一步講,內存管理用到了我們常常掛在嘴邊的堆和棧這兩種數據結構。
最後對於「編譯器分配空間」這種不嚴謹的說法,你可以理解成編譯期間它為你規劃好了這些變數的內存使用方案,這個方案寫到可執行文件裡面了(該文件中包含若干並非出自你大腦衍生的代碼),直到程序運行時才真正拿出來執行!
3. 編譯器在編譯的時候做了什麼給申明的變數分配內存
編譯器在編譯的時候是不會聲明變數和分配內存的。 分配內存之類的是在運行時執行的。
一般編譯器在編譯的時候,只是做代碼的格式檢查, 然後將代碼轉換成機器碼或中間代碼。
4. C語言變數的名稱是怎麼存在的,在內存中么
編寫C語言源程序時可以理解成通過變數名訪問值,但程序必須編譯成可執行的二進制文件方能運行,這時都是對內存進行存取,已不存在變數名了。
5. C語言變數名與內存空間有什麼邏輯關系
當你在程序這樣聲明一個變數的是:
char a;
那麼編譯的時候,編譯器會在內存中特定的位置給你這個變數申請一塊空間用來存你這個變數,根據變數的作用域不同會在不同的地址,比如全局變數就會在在數據段,而函數中的局部變數一般是在堆棧中,而要是malloc就會在堆中申請新的區域。在編譯的時候編譯器會保存一個變數名的表,這里記錄了每個變數的地址。當你使用一個變數的時候,相當於就是在這個地址的值操作了。
你可以找相關的書籍學習一下這方面的知識
6. 問一下各位,c語言編譯器是如何處理變數名的呢
編譯器編譯到int a;時就在內存中開辟一個兩位元組的內存空間,並且命名為a
7. 我們經常看到書上面說的 某某變數的內存單元是編譯器在編譯時候分配的 是什麼意思
所謂在編譯期間分配空間指的是靜態分配空間(相對於用new動態申請空間),如全局變數或靜態變數(包括一些復雜類型的常量),它們所需要的空間大小可以
明確計算出來,並且不會再改變,因此它們可以直接存放在可執行文件的特定的節里(而且包含初始化的值),程序運行時也是直接將這個節載入到特定的段中,不
必在程序運行期間用額外的代碼來產生這些變數。
其實在運行期間再看「變數」這個概念就不再具備編譯期間那麼多的屬性了(諸如名稱,類型,作用
域,生存期等等),對應的只是一塊內存(只有首址和大小),
所以在運行期間動態申請的空間,是需要額外的代碼維護,以確保不同變數不會混用內存。比如寫new表示有一塊內存已經被佔用了,其它變數就不能再用它了;
寫delete表示這塊內存自由了,可以被其它變數使用了。(通常我們都是通過變數來使用內存的,就編碼而言變數是給內存塊起了個名字,用以區分彼此)
內存申請和釋放時機很重要,過早會丟失數據,過遲會耗費內存。特定情況下編譯器可以幫我們完成這項復雜的工作(增加額外的代碼維護內存空間,實
現申請和釋 放)。從這個意義上講,局部自動變數也是由編譯器負責分配空間的。進一步講,內存管理用到了我們常常掛在嘴邊的堆和棧這兩種數據結構。
最後對於「編譯器分配空間」這種不嚴謹的說法,你可以理解成編譯期間它為你規劃好了這些變數的內存使用方案,這個方案寫到可執行文件裡面了(該文件中包含若干並非出自你大腦衍生的代碼),直到程序運行時才真正拿出來執行。
8. 變數名 被 編譯器 映放射成 內存地址嗎
是的。
編譯器會將合法的變數名放到一個叫「符號表」的一個表中。
每個符號對應一個地址。當你調用此變數時,就會根據此符號表找到對應的地址,然後進行操作。
9. 用變數名會占內存空間嗎
可以忽略。有時候為了代碼的整潔和風格的統一需要定義變數的。java虛擬機會根據你的代碼優化好去執行的,不必關心佔用內存的問題。
10. 變數名占不佔內存比如int a=12,這個a有沒有占內存
不佔,這個a是給編譯器看的,用int a還是int aaaaaa對編出來的程序沒影響