導航:首頁 > 源碼編譯 > 程序編譯後分配內存空間嗎

程序編譯後分配內存空間嗎

發布時間:2023-11-21 11:46:35

⑴ (C語言)編譯時給全局變數和靜態變數分配存儲空間,運行時給局部變數分配存儲空間,這樣說對嗎

全局變數,靜態局部變數,靜態全局變數都在靜態存儲區分配空間,而局部變數在棧里分配空間

全局變數本身就是靜態存儲方式, 靜態全局變數當然也是靜態存儲方式。這兩者在存儲方式上並無不同。這兩者的區別雖在於非靜態全局變數的作用域是整個源程序,當一個源程序由多個源文件組成時,非靜態的全局變數在各個源文件中都是有效的。而靜態全局變數則限制了其作用域,即只在定義該變數的源文件內有效,在同一源程序的其它源文件中不能使用它。由於靜態全局變數的作用域局限於一個源文件內,只能為該源文件內的函數公用,因此可以避免在其它源文件中引起錯誤。

⑵ C++類類型在說明時編譯器會給它開辟什麼內存空間

在你的類中由於你沒有編寫你自己的默認構造函數,所以執行語句A a1,a2,a3;時編譯器會調用編譯器提供的默認構造函數來生成三個對象。此時已經分配了內存空間,這些空間位於棧上,如果你用的是new關鍵字的話,這些內存將在自由存儲空間裡面分配,也就是在堆上,在C++中,程序員在堆上申請的內存空間,要自己負責釋放。

樓上的講錯了。

類的成員函數在內存中只有一份拷貝,而數據成員是每一個對象都有一份自己單獨拷貝,並且就是靠這些屬性來區分對象。
正是由於在成員函數中隱藏了this指針,所有成員函數會自動跟蹤對象。

⑶ C語言裡面的數組都是在編譯的時候就分配好內存的嗎

編譯的時候 只是確定了內存的大小
實際分配還是在運行時分配的
否則 無數的C語言程序 每一個都分配一段內存
卻不運行 電腦受不了的

java中的全局變數和靜態變數是在編譯時分配內存還是在載入時分配內存

全局變數是在創建對象的時候分配內存的 創建對象過程為

  1. 分配空間。

  2. 遞歸的創建父類對象。

  3. 初始化成員變數。

  4. 調用構造方法創建一個對象。

靜態變數是在類載入的時候分配空間的,靜態變數和對象沒有關系 是在JVM第一次讀到一個類的時候載入信息的過程中分配空間的 載入過程為

1 .載入父類(如果父類已經載入過,則不在載入)。

2.初始化靜態屬性 。

3 .按順序的初始化靜態代碼塊 初始化的前提就是分配空間 。

而且靜態變數在以後的創建對象的時候不在初始化 所以一般用靜態來保存共享信息

⑸ 關於編譯過程中分配內存的問題

好吧,問題沒看清楚.
他所謂的編譯時候分配的內存,其實就是你exe運行前的准備工作.
這些東西操作系統也能幫你做到.
你那書是把編譯和調試歸為一體了,所以對於他來說,編譯就會運行程序...
編譯只是為了生成exe文件,而exe文件是放在硬碟上的.
所以,你重啟之後exe還在,運行exe之後,才分配內存

⑹ 給變數分配內存單元是在什麼時候進行的

這個涉及到局部變數還是全局變數的問題,函數中的變數屬於局部變數,所以再調用到之後才開辟內存空間,但局部變數所在函數調用完畢,局部變數就被取消了,然後所佔內存就被收回了。 而全局變數由於作用域很廣,一旦定義,編譯器就會分配內存,程序運行期間這塊內存單元一直有效,直到整個程序結束才由系統收回內存~~

⑺ 編譯時分配內存和運行時分配內存

編譯其實只是一個掃描過程,進行詞法語法檢查,代碼優化而已,編譯程序越好,程序運行的時候越高效。
我想你說的「編譯時分配內存」是指「編譯時賦初值」,它只是形成一個文本,檢查無錯誤,並沒有分配內存空間。

當你運行時,系統才把程序導入內存。一個進程(即運行中的程序)在主要包括以下五個分區:
棧、堆、bss、data、code

代碼(編譯後的二進制代碼)放在code區,代碼中生成的各種變數、常量按不同類型分別存放在其它四個區。系統依照代碼順序執行,然後依照代碼方案改變或調用數據,這就是一個程序的運行過程。

⑻ C++中,只有類,沒有對象,編譯時是否會賦予類被分配空間的能力

你說的「空間」看來是指數據呢。那確實是不會。
另外對於函數,沒有被調用到,運行時就不會給它分配對應空間,這指的也是數據空間

代碼空間的話,類或者函數,都有。

⑼ c語言中編譯系統和操作系統誰為變數分配相應的存儲空間

編譯系統將程序編譯成可執行代碼

操作系統執行程序,按照可執行代碼需求為程序分配代碼空間、常量空間、變數空間、堆棧空間,然後執行程序。

⑽ c語言哪些占程序空間哪些占內存空間

一個由C/C++編譯的程序佔用的內存分別為以下四個部分:

  1. 程序代碼區:存放程序的二進制代碼。

  2. 靜態數據區:存放程序運行期間用到的數據。其存儲空間是在編譯時分配的,在整個程序執行期間靜態數據區中的數據一直存在,程序結束後由系統釋放。

  3. 動態內存區(也稱棧):也存放程序運行期間用到的數據,其存儲空間在程序運行期間由編譯器自動分配釋放,其生命周期短於程序的運行期。

  4. 堆區:由程序員分配釋放,若程序員不釋放,程序結束時可能由系統回收。

以上內容抄自課本《C語言與程序設計》(電子工業出版社)

閱讀全文

與程序編譯後分配內存空間嗎相關的資料

熱點內容
163郵箱伺服器的ip地址 瀏覽:48
伺服器跟域是什麼 瀏覽:126
rails啟動命令 瀏覽:463
logistic命令怎麼用 瀏覽:736
c語言點滴pdf 瀏覽:745
linuxrtc編程 瀏覽:256
linux打包並壓縮命令 瀏覽:642
aes加密的證書格式 瀏覽:97
oracledbcalinux 瀏覽:842
酬勤任務app怎麼被特邀 瀏覽:197
android應用文件夾 瀏覽:1000
平面設計法則pdf 瀏覽:337
3d圓角命令怎麼用 瀏覽:567
程序員買意外險還是重疾險 瀏覽:619
遼寧的dns伺服器地址雲空間 瀏覽:446
我的世界伺服器斷開後怎麼連接 瀏覽:413
htmltopdfpython 瀏覽:75
如何預覽網站源碼文件 瀏覽:35
怎麼修改後台源碼 瀏覽:28
bat編程入門 瀏覽:853