導航:首頁 > 軟體知識 > 數組存放在程序的哪個段上

數組存放在程序的哪個段上

發布時間:2024-02-29 08:15:09

① c語言數組在內存中是怎麼分配的

C語言使用的內存是虛擬內存。按照功能的不同在C語言中又將虛擬內存為分三類:棧區、堆區、靜態數據區,不管是單一變數還是數組,其內存分配都是這樣分的。

在棧區、靜態數據區、堆區會有編譯器負責分配、操作系統負責管理,程序員可以在堆區使用malloc()來動態分配堆內存的問題。

(1)數組存放在程序的哪個段上擴展閱讀

內存的分配和釋放注意事項:

1、malloc和free是庫函數,不是系統調用

2、malloc實際分配的內存可能會比請求的多---有些編譯器分配時是以4位元組為單元的

3、不能依賴於不同平台的下的malloc

4、當請求的動態內存無法滿足時malloc返回的是NULL

5、當free的參數為NULL時,函數直接返回

② int a=1;和int [] arr={1}; 在內存中是如何存儲嗎

程序被載入到內存後,計算機以段的方式進行管理程序, 源代碼部分被放到 .text 段, 已經初始化的全局變數被放在 .data 段, 未初始化的全局變數放在 .bss 段, 而局部變數則使用堆棧實現。一個變數比如 int a = 1; 被放到哪個段和你定義的位置有關, 如果你是在函數內定義, 則是動態分配的, 當執行到這一句時直接用函數棧的內存來保存該變數, 執行完,函數棧被彈出,數據也就消失了。如果是全局變數則由載入器(負責將程序載入到內存中)提前分配好一塊.data和.bss段空間,如果定義時就初始化,則載入器將它放到 .data 區,然後使用硬碟中的程序文件中的初始化數據進行初始化,如果是未初始化數據,則直接給分配,不用初始化哈。這些工作都完成後,開始才執行程序。
程序執行後,因為載入器已經將數據給初始化,我們可以直接訪問改值。
至於在內存中是怎麼樣的存在呢,內存是可以以位元組進行隨機訪問的(所以叫做隨機存儲器),也就是說我們只要告訴內存某個地址,它就給我們返回改地址的位元組數據。一個地址保存一個位元組數據。
比如int a = 1; 一般來說int是32位,4位元組,那麼在內存中會佔用4個地址, 但是我們訪問的時候只要告訴 cpu該變數的起始地址和大小(編程語言已經自動幫我們實現了,對一個已經定義的變數進行索引,它會自動轉成該變數的地址和大小)就可以直接讀取完整個變數,數組也一樣,只是訪問的位元組多一些。你可以告訴cpu 數組的首地址, 但是只訪問4個位元組,那麼讀取到的是數組的第一個int數據,然後將起始地址再偏移4個位元組,再讀4個位元組,則可以讀取到下一個int數據, 這個過程起始被編譯器實現了, int [] 就表示數據是以 int 也就是 4位元組分配的,當你使用索引 arr[i] 的時候,它會自動按4位元組的偏移進行取數據。

閱讀全文

與數組存放在程序的哪個段上相關的資料

熱點內容
山東二手貨車交易市場哪裡最便宜 瀏覽:683
舉報行為信息保存多久 瀏覽:137
四川維諦微模塊數據中心有哪些 瀏覽:353
抖音二級代理商干什麼 瀏覽:951
如何表格設置重復數據 瀏覽:864
雲聯惠怎麼代理 瀏覽:869
mysql中性別是什麼類型數據 瀏覽:953
在市場附近開一家米粉店怎麼經營 瀏覽:466
微信下面如何顯示公司信息 瀏覽:904
陽泉職業技術學院什麼系 瀏覽:719
游戲代理什麼人可以幫忙 瀏覽:991
草莓鼻如何去黑頭學生用什麼產品 瀏覽:972
河北哪裡有賣狗市場 瀏覽:974
淘寶收藏用戶數據哪裡來 瀏覽:185
技術菜適合玩哪個輔助 瀏覽:751
模塊化程序需要注意什麼 瀏覽:479
s7源程序如何最後轉換 瀏覽:571
交易貓安全驗證在哪裡驗證 瀏覽:563
用什麼函數可以出相應數據 瀏覽:452
行政訴訟再審程序按什麼程序審理 瀏覽:207