段中存c語言
C語言編譯器負責將源代碼中的十進制的10翻譯成4位元組數據:0A(16進制)(實際存儲為二進制,但描述起來太長不方便一般用16進制顯示和描述),而一個位元組的10實際上的二進制就是你說的00001010。
實際上在處理存儲之前需要先分配一個內存給變數 i,並在編譯環境中注冊登記這個變數名-地址關系(變數表),方便後續代碼訪問此變數時匹配到該地址,比如遇到 i=i+2時,編譯器就會生成一個指令對該地址的值進行+2操作。此外還需要生成一個MOV指令代碼指揮CPU執行:數據保存到該地址。
如果你對編譯後的細節感興趣,可以在調試時按CTRL+ALT+D(VS的快捷鍵,也可以通過菜單導航到「調試-窗口-反匯編」,其他編譯器在調試菜單中找)切換到反匯編窗口查看編譯結果,系統會逐條顯示每一條語句對應的匯編指令。
當你對匯編指令感到好奇之後,可以看看匯編、編譯原理、8086 CPU原理、以及數字電路的解碼器 等書籍,不需要完全看懂,了解下會對你學習任何編程語言有幫助,不僅僅局限於C語言。
2. c語言常量變數在內存中的存儲方式
從靜態存儲區域分配:內存在程序編譯的時候就已經分配好,這塊內存在程序的整個運行期間都存在。例如全局變數,static變數。
在棧上創建(地址從大到小):在執行函數時,函數內局部變數的存儲單元都可以在棧上創建,函數執行結束時這些存儲單元自動被釋放。棧內存分配運算內置於處理器的指令集中,效率很高,但是分配的內存容量有限。(棧上的變數都具有臨時變數的特性)
從堆上分配(地址從小到大):亦稱動態內存分配。程序在運行的時候用malloc或new申請任意多少的內存,程序員自行負責在何時用free或delete釋放內存。
(2)段中存c語言擴展閱讀:
注意事項:
const在C語言中使用比較多,雖然變數由const修飾,但是從本質上仍然是變數,所以存儲在堆棧和靜態存儲區,這么區域從進程角度來講是可讀可寫,但為什麼const修飾後將變得不可寫了。
既然const變數所在區域的屬性為可讀可寫,那麼可以修改其所處內存的值了。
C語言const變數的作用說起:const是一個c語言的關鍵字,限定一個變數不允許被改變,產生靜態作用。使用const在一定程度上可以提高程序的安全性和可靠性。另外在觀看別人代碼的時候,清晰理解const所起的作用,對理解對方的程序也有一些幫助。
3. C語言中有哪些存儲類型
自動,靜態,外部,寄存在函數體內聲明的變數在默認情況下都是auto存儲類型
在代碼塊之間傳遞信息的一種方法就是使用外部變數。當一個變數在函數的外部被聲明時,安的存儲空間是永久分配的,安人存儲類型是extren.外部變數的聲明看上去和函數或代碼塊內部所聲明的變數一樣。外部變數對於它之後的所有函數都有效。在代碼塊或函數後,外部變數仍然存在。
static的基本用途是允許一個局部變數在重新進入代碼塊時能夠保持原來的值。這和自動變數形成了鮮明的對比,自動變數在代碼塊時會被銷毀,再次進入這個代碼塊時,它必須重新進行初始化。
register存儲類型告訴編譯器相關的變數應該改量存儲在高速度的寄存器中。使用register存儲類型的目的一般是為了提高執行速度,但是,register聲明只是向編譯器所提出的「建議」,並非強制要求
4. C語言中函數是如何存儲的
1. 代碼本身是存儲在內存的代碼段中的,而函數沒有說存儲的概念,函數調用時是通過棧來實現的。
2.在函數體內聲明的變數在默認情況下都是auto存儲類型
在代碼塊之間傳遞信息的一種方法就是使用外部變數。當一個變數在函數的外部被聲明時,安的存儲空間是永久分配的,安人存儲類型是extren.外部變數的聲明看上去和函數或代碼塊內部所聲明的變數一樣。外部變數對於它之後的所有函數都有效。在代碼塊或函數後,外部變數仍然存在。
3.static的基本用途是允許一個局部變數在重新進入代碼塊時能夠保持原來的值。這和自動變數形成了鮮明的對比,自動變數在代碼塊時會被銷毀,再次進入這個代碼塊時,它必須重新進行初始化。
4.egister存儲類型告訴編譯器相關的變數應該改量存儲在高速度的寄存器中。使用register存儲類型的目的一般是為了提高執行速度,但是,register聲明只是向編譯器所提出的「建議」,並非強制要求。
5. c語言變數如何存儲在內存中
在系統為一個程序分配的空間中,分成許多段,比如有代碼段,存放程序可執行代碼,有數據段,可以分配變數,有常量段,專門存放常量,是只讀的。常量變數可以位於數據段中,仍然是變數,只是程序沒有改動許可權。在程序執行到main之前,系統負責將常量區存儲的常量賦值給常量。