免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
進(jìn)程的地址空間:TEXT,DATA,BSS,HEAP,STACK

 現(xiàn)代操作系統(tǒng)對每個進(jìn)程都分配了完整的虛擬內(nèi)存地址空間。進(jìn)程會把整個地址空間分成多個區(qū)間來使用。 程序員最為熟悉的兩個區(qū)間莫過于。然而還有其他的內(nèi)存區(qū)間來存儲代碼、靜態(tài)、全局變量等等。 本文來總結(jié)一下這些內(nèi)存區(qū)間到底存的是哪些東西。先看圖:

 圖片來源: SWAT Blog

虛擬內(nèi)存技術(shù)使得每個進(jìn)程都可以獨(dú)占整個內(nèi)存空間,地址從零開始,直到內(nèi)存上限。 每個進(jìn)程都將這部分空間(從低地址到高地址)分為六個部分:

  1. TEXT段:整個程序的代碼,以及所有的常量。這部分內(nèi)存是是固定大小的,只讀的。
  2. DATA段,又稱GVAR:初始化為非零值的全局變量。
  3. BSS段:初始化為0或未初始化的全局變量和靜態(tài)變量。
  4. HEAP(堆):動態(tài)內(nèi)存區(qū)域,使用mallocnew申請的內(nèi)存。
  5. 未使用的內(nèi)存。
  6. STACK(棧):局部變量、參數(shù)、返回值都存在這里,函數(shù)調(diào)用開始會參數(shù)入棧、局部變量入棧;調(diào)用結(jié)束依次出棧。

其中堆和棧的大小是可變的,堆從下往上生長,棧從上往下生長。

由于常量存儲在TEXT段中,所有對常量的賦值都將產(chǎn)生segment fault異常。

可以認(rèn)為BSS段中的所有字節(jié)都是0。因?yàn)槲闯跏蓟娜肿兞?、靜態(tài)變量都在BSS段中, 所以它們都會被初始化為0,同時類的成員變量也會被初始化為0,但編譯器不保證局部變量的初始化。

上面說棧(STACK)是從上到下(高地址到低地址)分配的,而且我們知道, 函數(shù)的局部變量的空間是在進(jìn)入函數(shù)體后才分配的,在??臻g里。來個例子來看看吧!

int main(){    char a=0, b=0;    int *p = (int*)&b;    *p = 258;    printf("%d %d", a, b);    return 0;}

輸出是

1 2

正常來講先分配a的地址,再分配b的地址,大小均為1字節(jié),同時它們的地址是連續(xù)的! 然后對b的地址進(jìn)行賦值258(二進(jìn)制表示是1 0000 0002)。 后面8位0000 0002賦值給了b,前面的1賦值給了a

上述結(jié)果和CPU端模式也有關(guān)系!我的CPU是小端字節(jié)序的~ 低位存的是低字節(jié)。


除非注明,本博客文章均為原創(chuàng),轉(zhuǎn)載請以鏈接形式標(biāo)明本文地址: http://harttle.com/2015/07/22/memory-segment.html

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
匯編中bss,data,text,rodata,heap,stack的意義
程序中的數(shù)據(jù)在內(nèi)存中的布局
程序分text, data (initialized), bss, stack, heap幾個段 - C Language Syntax - 木瓜老C
Linux x86_64與i386區(qū)別
Linux從程序到進(jìn)程
堆和棧_stm32 walkdream.com
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服