Linux內存地址空間

目錄

一、虛擬地址空間

1.虛擬地址空間的定義

2.虛擬地址空間的布局

二、內存壁壘

? ? ? ? 1.內存壁壘的定義?編輯

2.段錯誤

三、內存映射的建立與解除

? ? ? ? (1)mmap

? ? ? ? (2)munmap

(3)堆內存的分配和釋放

1.sbrk

2.brk


????????我們先來思考一個問題:你寫出的程序經過編譯之后得到a.out是如何跑起來的呢?

? ? ? ? a.out文件是二進制指令的集合。其內容經過了操作系統的管理調度被加載到了物理內存中,CPU再從物理內存中讀取指令,并且執行,這樣我們的程序就跑起來啦!

一、虛擬地址空間

1.虛擬地址空間的定義

? ? ? ??

????????這段文字告訴了我們:我們看到的地址是假的!是操作系統給我們看到的表象,我們借助這個表象的地址+操作系統存下的映射關系就能找到相應的物理內存,從而進行數據的訪問了。

? ? ? ? 那么操作系統為什么要維護這樣一個映射關系表呢?而不給我們實際的物理地址?

其實在計算機剛剛誕生的時候(還沒有操作系統),人們就是這樣做的,但是這樣會有許許多多的麻煩事,人們要不斷的計算所使用內存的大小,從而規劃下一步在哪個地方使用內存,但是一旦操作不當就會導致內存泄漏或者程序崩潰。

? ? ? ? 于是人們便開發了操作系統這樣的一個東西來幫助我們合理使用內存。而操作系統自己用了一個虛擬內存的東西來映射實際的物理內存,從而知道哪一塊空間被使用了,哪一塊空間沒有被使用,自此我們對內存的操作大部分都交給了操作系統來處理,于是人力資源得到了極大的程度的解放。

32位:

? ? ? ? (1)對于32位操作系統而言,每個進程都有4G大小的虛擬地址空間。

? ? ? ? (2)所謂的地址空間就是一個地址范圍,表示程序的尋址能力(但是并不意味著一定用到了4G大小的物理內存)我們所看到的虛擬地址都是在4G的這個范圍內的

????????(3)對于32位操作系統,其虛擬地址空間范圍是0X0000 0000到0XFFFF FFFF也就是4G

? ? ? ? (4)其中的0到3G-1范圍歸用戶使用,稱為用戶地址空間;3G到4G-1的范圍歸內核使用,稱為內核地址空間。

64位:

? ? ? ? (1)對于64位操作系統而言,目前的程序還沒有那么大的內存需求,所以不支持完全的64位虛擬地址

? ? ? ? (2)64位操作系統上,其用戶的地址空間是0X0000 0000 0000 0000到0X0000 FFFF FFFF FFFF

? ? ? ? (3)其內核的地址空間是0XFFFF 0000 0000 0000到0XFFFF FFFF FFFF FFFF

? ? ? ? (4)內核地址空間和用戶地址空間之間的是不規范地址空間,不允許使用

? ? ? ? (5)用戶地址空間的代碼不能直接訪問內核空間的代碼和數據,但是可以通過系統調用進入內核,間接與系統內核交互

2.虛擬地址空間的布局

二、內存壁壘

? ? ? ? 1.內存壁壘的定義

????????從上面一段話中,我們可以看到:每一個進程中,只有內核空間的虛擬地址是一樣的,別的用戶地址空間部分都是各自獨立的(可能在兩個進程中,虛擬地址的值都是一樣的,但是映射在物理內存中卻有差別)

? ? ? ? 且內核的代碼和數據只能通過系統調用來訪問!!!

2.段錯誤

????????

????????第一種情況是:對沒有映射到物理內存的虛擬內存進行了訪問,但是操作系統沒有記錄這個虛擬地址,所以就成了一個野指針類似的虛擬地址。

? ? ? ? 第二種情況是:在只讀內存區域進行了寫操作(比如在常量代碼段進行修改)

三、內存映射的建立與解除

? ? ? ? (1)mmap

????????一般情況下,我們第一個參數start都給的是NULL讓系統自己來決定細虛擬地址;

????????length要求是按頁圓整(即4096的整數倍個字節);

????????而prot必須在PROT_READ和PROT_WRITE以及PROT_EXEC和PROT_NONE中選擇一個,作為我們映射區的操作權限;

????????最后,flags是映射標志,我們這里因為沒有涉及到文件,所以是將虛擬內存映射到物理內存中,所以要選擇MAP_ANONYMOUS(注意這里的flags都是可以多種選擇的,比如我們可以用MAP_PRIVATE|MAP_ANONYMOUS讓他既是匿名映射又是映射到緩沖區中)

? ? ? ? fd是文件描述符,我們在后續講到文件系統的時候再說

? ? ? ? (2)munmap

(3)堆內存的分配和釋放

1.sbrk

2.brk

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/715358.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/715358.shtml
英文地址,請注明出處:http://en.pswp.cn/news/715358.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android13 設置固定熱點ip地址192.168.43.1

Android13 設置固定熱點ip地址192.168.43.1 文章目錄 Android13 設置固定熱點ip地址192.168.43.1一、前言二、設置固定ip地址實現1、Android13 代碼中的實現:添加屬性寫法: 2、Android11 或者更舊的代碼中的實現: 三、其他1、Android 代碼獲連…

Python中學習調試requests模塊時出現的大坑(1)

為防止迷路: 學習機械相關,請關注公眾號:南大盛聯 學習軟件,硬件,請關注公眾號號:一訓微課 cmd模式下 不知道上面這行的話,需要補課。 pip install requests 這個不知道的話,也要補課 pip是python的安裝工具。 install是安裝的意思 requests是我們需要安裝的模…

HTML超鏈接去下劃線

當在HTML中創建超鏈接時&#xff0c;默認情況下會顯示為帶有下劃線的藍色文本。如果想要去掉下劃線&#xff0c;可以使用CSS樣式來實現。 示例代碼&#xff1a; <!DOCTYPE html> <html> <head> <style> a {text-decoration: none;color: blue; /* 設…

微信小程序 --- 事件處理

事件處理 一個應用僅僅只有界面展示是不夠的&#xff0c;還需要和用戶做交互&#xff0c;例如&#xff1a;響應用戶的點擊、獲取用戶輸入的值等等&#xff0c;在小程序里邊&#xff0c;我們就通過編寫 JS 腳本文件來處理用戶的操作 1. 事件綁定和事件對象 小程序中綁定事件與…

sora會是AGI的拐點么?

©作者|謝國斌 來源|神州問學 OpenAI近期發布的Sora是一個文本到視頻的生成模型。這項技術可以根據用戶輸入的描述性提示生成視頻&#xff0c;延伸現有視頻的時間&#xff0c;以及從靜態圖像生成視頻。Sora可以創建長達一分鐘的高質量視頻&#xff0c;展示出對用戶提示的精…

PoC免寫攻略

在網絡安全領域&#xff0c;PoC&#xff08;Proof of Concept&#xff09;起著重要的作用&#xff0c;并且在安全研究、漏洞發現和漏洞利用等方面具有重要的地位。攻擊方視角下&#xff0c;常常需要圍繞 PoC 做的大量的工作。常常需要從手動測試開始編寫 PoC&#xff0c;再到實…

vue項目電商

這個項目功能有首頁&#xff0c;分類&#xff0c;商品詳情&#xff0c;購物車&#xff0c;用戶注冊、登錄等等的實現&#xff0c;并且可以在手機上進行展示。 git倉庫地址&#xff1a;https://gitee.com/BisShen/project.git

應用層http協議包解析與https加密策略解析

文章目錄 一.應用層協議--http協議基礎認知二.https協議加密策略解析加密策略1--通信雙方只使用對稱加密加密策略2--通信雙方使用單方非對稱加密加密策略3--通信雙方都使用非對稱加密加密策略4--非對稱加密與對稱加密配合使用中間人攻擊數據簽名與CA證書HTTPS數據安全認證的本質…

二維碼門樓牌管理系統技術服務的分類與應用

文章目錄 前言一、二維碼門樓牌管理系統的分類二、二維碼門樓牌管理系統的應用優勢三、結論 前言 隨著城市管理的精細化和智能化&#xff0c;二維碼門樓牌管理系統成為了現代城市管理的重要工具。該系統將傳統的門牌、樓牌、戶牌與二維碼技術相結合&#xff0c;實現了信息的快…

如何優化一個運行緩慢的SQL查詢?有哪些常見的優化技巧?

如何優化一個運行緩慢的SQL查詢&#xff1f; 當面對一個運行緩慢的SQL查詢時&#xff0c;優化是提升數據庫性能的關鍵步驟。優化查詢不僅可以減少查詢執行時間&#xff0c;還可以降低系統資源消耗&#xff0c;提高整體的系統吞吐量。以下將詳細探討如何優化一個運行緩慢的SQL查…

MySQL:常用的SQL語句

提醒&#xff1a;設定下面的語句是在數據庫名為 db_book執行的。 一、創建表 1. 創建t_booktype表 USE db_book; CREATE TABLE t_booktype(id INT AUTO_INCREMENT, bookTypeName VARCHAR(20),bookTypeDesc varchar(200),PRIMARY KEY (id) );2. 創建t_book表 USE db_book; C…

[筆記] wsl 禁用配置 win系統環境變量+代理

wsl 配置禁用 win系統環境變量 進入 wsl 的 /etc/wsl.conf 目錄&#xff0c;增加以下配置&#xff1a; [interop] enabledfalse appendWindowsPathfalse然后退出wsl&#xff0c;并且執行關閉正在運行的 wsl&#xff0c;執行命令 wsl --shutdown 最后重新進入wsl 即可。 參考…

C語言-----動態內存管理(1)

1.引入 我們之前已經學習了幾種開辟內存空間的方式&#xff1a; &#xff08;1&#xff09;int a10;開辟4個字節大小的空間 &#xff08;2&#xff09;int arr[10]{0}定義數組開辟了一串連續的空間 2.malloc和free (1)malloc開辟內存空間可能會失敗&#xff0c;因此需要檢查…

HTML5+CSS3+JS小實例:文字陰影還能這么玩

實例:文字陰影還能這么玩 技術棧:HTML+CSS+JS 效果: 源碼: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge"…

Android java基礎_泛型

一.java泛型是什么 Java 泛型&#xff08;Generic&#xff09;是 Java 5 中引入的一種特性&#xff0c;它允許類、接口和方法在定義時使用一個或多個類型參數&#xff0c;這些類型參數在調用時會被實際類型替換&#xff0c;從而增強了代碼的重用性和類型安全性。通過使用泛型&…

鴻蒙Harmony應用開發—ArkTS聲明式開發(通用屬性:形狀裁剪)

用于對組件進行裁剪、遮罩處理。 說明&#xff1a; 從API Version 7開始支持。后續版本如有新增內容&#xff0c;則采用上角標單獨標記該內容的起始版本。 clip clip(value: boolean | CircleAttribute | EllipseAttribute | PathAttribute | RectAttribute) 按指定的形狀對當…

Spring基礎——XML配置Bean的實例化

目錄 實例化Bean的方式使用構造函數實例化Bean使用靜態工廠的方式實例化Bean使用實例化工廠方式實例化Bean通過實現FactoryBean自定義實例化Bean 實例化Bean的方式 bean的創建本質上就是創建一個或多個具有外部配置屬性的對象&#xff0c;容器在啟動的時候會查看命名Bean的配置…

中美加密監管突傳“巨響”!比特幣突破7萬信號出現!馬斯克一句話掀起大行情!

比特幣本周觸及64000美元高價&#xff0c;2月交易所儲備減少近45000多枚比特幣&#xff0c;市場將其解讀為看漲70000美元的關鍵信號。中美加密監管傳利好&#xff0c;香港加密牌照申請期限結束&#xff0c;已有24家機構入列待批&#xff0c;美國考慮允許比特幣ETF及相關信托期權…

uview2中上傳文件和若依前后端分離配合的代碼

uview2中的上傳文件需要配合著自己后端的上傳的代碼 uview2 代碼&#xff1a; uploadFilePromise(url) {return new Promise((resolve, reject) > {// 后續自己封裝let a uni.uploadFile({//自己的請求路徑url: that.$baseURL /uploadAvater, //上傳的文件filePath: tha…

Java | vscode如何使用命令行運行Java程序

1.在vscode中新建一個終端 2.在終端中輸入命令 javac <源文件>此命令執行后&#xff0c;在文件夾中會生成一個與原java程序同名的.class文件。然后輸入如下命令&#xff1a; java <源文件名稱>這樣java程序就運行成功了。&#x1f607;