一、為什么要有虛擬內存
虛擬內存的提出,是為了禁止用戶直接訪問物理存儲設備,有助于系統(tǒng)穩(wěn)定。
?
二、為什么一個程序不能訪問另外一個程序的地址指向的空間
1:每個程序的開始地址0x80084000
2:程序中使用的地址不是物理地址,而是邏輯地址(虛擬內存).
?????? 邏輯地址僅僅是編號.編號使用int 4字節(jié)整數(shù)表示.
?????? 2^32=4294967296=4G
????? ?每個程序提供了4G的訪問能力
?
三、內存映射
邏輯地址與物理地址關聯(lián)的過程是內存映射。
虛擬地址與物理地址映射的時候有一個基本單位:至少會映射4K。
段錯誤:無效訪問. 那段內存沒有映射,訪問的內存超出了系統(tǒng)所給這個程序的內存空間。
合法訪問:比如malloc分配的空間之外的空間可以訪問,但訪問非法。因是越界訪問
?
四、虛擬內存的分配
分配釋放內存:???int brk(void *end); //分配空間,釋放空間
?void *sbrk(int size); //返回空間地址
應用:1.使用sbrk分配空間
? ??????2.使用sbrk得到?jīng)]有映射的虛擬地址.
? 第一次調用sbrk,sbrk(0)得到的是沒有映射的虛擬首地址。
? ??????3.使用brk分配空間
? ??????4.使用brk釋放空間
?
sbrk(int? size):如果是第一次運行,則返回沒有映射的空閑空間首地址,同時產(chǎn)生一個數(shù)據(jù):指向地址
???? ?sbrk與brk后臺系統(tǒng)維護一個指針,指針默認是null。
???? ?調用sbrk,判定指針是否是0,是:得到大塊空閑空間的首地址初始化指針.同時把指針+size????
?????? ???????????????????????????????? 否:返回指針,并且把指針位置+size
更多文章、技術交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
