計算機基礎:內存模型

專欄導航

上一篇:WIndows 編程輔助技能:格式工廠的使用

回到目錄

下一篇:MFC 第一章概述

本節前言

本來呢,沒想著在單獨的課節中講解內存模型。但是呢,在我寫過的一些個課節中,我發現,內存模型,大概還是有必要去講一講的。不然的話,每次涉及這一知識點的時候,我還得費勁巴力地再來講一次,實在是麻煩。

學習本節之前,我們需要大家學習過十六進制的知識。在本專欄的預備章節中,有關于十六進制的知識的講解。不會的話,你可以參照相應的課節,來學習進制知識。

本節,我僅僅列出講解十六進制知識的其中幾個參考課節。

課節:計算機基礎:二進制基礎10,用十六進制來查數

課節:計算機基礎:二進制基礎11,十六進制的位基和位權

課節:計算機基礎:二進制基礎12,十進制數轉換為十六進制

課節:計算機基礎:二進制基礎13,十六進制與二進制的相互轉換

你可以先學習本節的后續知識。遇到不會的,再去參考課節中,學習進制知識。或者,你也可以在本專欄目錄中,在預備章節里面,系統地學習進制知識。

這樣子說起來,也許你會覺得很麻煩。沒辦法,學習計算機知識,有些時候,確實是會麻煩一些。

一.? ? 物理內存

首先呢,我們來看一看內存的實物。

圖1
圖2
圖3

上面的三張圖,就是電腦里的內存條,就是物理內存。

這些個東西,對于組裝電腦,升級配件的人是有用的。然而,對于程序員來講,我們所關注的,并不是內存的物理形狀。

二.? ? 內存的抽象

程序員并不關注內存的物理形態,關心的是它在編程方面的抽象含義。

在計算機里面,有很多的地方,可以用來存儲數據。在內存里面可以存儲數據,在寄存器里面也可以存儲數據。存儲數據的最小單位,是比特。一個比特,要么存儲 0,要么存儲 1 。連續的 8 個比特,為一個字節。

所以呢,一個比特,它包含著 8 個二進制位,也就是包含著 8 個比特。

雖說,計算機存儲數據的最小單位是比特,但是,計算機存儲數據的基本單位,卻不是比特,而是一個字節。

在基礎的 C/C++ 學習里面,可以用來存儲一個字節的數據類型有兩種,一個是 signed char 型,另一個是 unsigned char 型。C 語言對于 char 數據類型究竟歸屬于 signed char 還是歸屬于 unsigned char,是沒有定義的。因此,不同的編譯器,可以作出不同的處理。

本專欄所采用的 Visual Studio 集成開發環境,它默認地,是將 char 數據類型視為 signed char 類型。

占用一個字節的數據類型有兩個,一個是 signed char,另一個是 unsigned char 。而在這里,我們將 unsigned char 數據類型,起另外的一個名字,叫做字節型。

計算機存儲數據的基本單位,是一個字節。在計算機內存里面,有很多個空間,可以用來存儲數據,可以存儲很多很多的字節的數據。

計算機存儲數據的基本單位,是一個字節。往內存里存儲數據也是一樣的,最起碼得是存儲一個字節,不能再小了。

整個的一個內存,包含著很多很多的字節空間,每一個字節空間,都可以存儲一個字節的數據。所以呢,整個的內存,可以視為一個字節空間集合。或者,我們也可以將一個內存,視為一個字節數組。

申請數組,大家應該會吧。

unsigned char str[100];

上面的代碼,申請了一個字節數組,這個數組包含了 100 個字節的空間。

而計算機內存,其實也是字節數組。只是,這個數組很大很大。

本分節,我們的任務,只是希望讓大家了解一個概念,那就是,在程序員的眼中,內存其實只是一個字節數組。

三.? ? 內存大小

內存中的一個存儲數據的基本單位,是一個字節,也就是一個 Byte,也寫作 B 。1024 個字節,為1 個 KB 。1024 KB,為 1 兆字節,也寫作 1MB 。1024 MB,為 1 吉字節,也寫作 1 GB 。1024 GB,為 1 太字節,也寫作 1? TB 。

1 個字節為 1B 。

1024 B = 1KB 。

1024 KB = 1MB 。

1024 MB = 1 GB 。

1024 GB = 1 TB 。

1024 等于 2 的 10 次方。

1 個字節為 1 B 。

2^{10}B = 1KB 。

2^{10}KB = 1MB 。

2^{10}MB = 1GB 。

2^{10}GB = 1TB 。

如果你的內存條,只能存儲100個數據,那么,你的內存尺寸就是 100 B 。如果你的內存能夠存儲 1024 個數據,那么,你的內存的尺寸就是 1024 B,也就是 1KB 。如果你的內存能夠存儲 4096 個數據,也就是 4 × 1024 個數據,那么,你的內存的尺寸就是 4 KB 。

內存的尺寸,通常使用 MB,GB 作為計量單位。

我初中的時候,我所聽到的內存尺寸,有 256 MB 的,有 512 MB 的。

后來,聽說了 1GB 的,2GB,4GB 的。而現在的內存,8GB,16GB,32GB,應該都是常見的。因為,低于 4GB 的,根本就運行不了 Win10,Win11 。即使你使用的是 WIn7,Win8,估計,你的電腦,也至少安裝 4GB 的內存。

以上,是我對內存尺寸的講解。

四.? ? 內存地址

內存中,可以用來存儲數據的每一個字節空間,都有一個編號。我們在第二分節中說了,內存的本質 ,是一個尺寸很大的字節數組。這個字節大數組的數組下標,也就是這個字節數組的索引,便是這個字節空間的編號。這個字節空間的索引或編號,便是內存地址。

通常來講,在表示內存地址的時候,我們并不使用十進制數,而是使用十六進制數。習慣上,我們使用八位十六進制數,來表示一個內存地址。

比如說,我們在程序中,申請了一個 char 型變量 ch。假定,這個 char 型變量的地址,為 0x0CE32100 。再假定,我們用 MEM 來表示內存。所以呢,將這個 char 型變量 ch 賦值為 100,相當于是將 MEM[0x0CE32100] 賦值為 100 。

一般來講,程序中的變量的地址,都會是一個比較大的十六進制數,且這個地址值,會用八位十六進制數來表示。這看起來,也許會顯得很不方便。然而,相比十進制表示法來講,十六進制表示法,已經是幫助我們簡化了一些個工作了。

你可以自己試著去編寫一個 C 語言程序,在程序里面申請一個變量,并且測試和打印這個變量的地址。

比如說,我們可以編寫如下的程序。

#include <stdio.h>int main()
{char ch01;char * p;p_ch = &ch01;printf("%p\n", p_ch);return 0;
}

至于說,如何建立 C/C++ 程序項目,如何編譯,運行這個程序,你可以參考如下文章鏈接。

課節:使用 VS2010 編寫 C語言程序

課節:用 VS2019 編寫C語言程序

表示內存地址的時候,所使用的,是十六進制數。剛開始使用十六進制數的時候,你也許會覺得不習慣。其實,在高級語言的學習里面,我們使用十六進制的地方并不多。然而,在你以后去學習匯編語言的時候,學習十六進制的地方,自然地,會多起來。

啥時候去學習和十六進制,你可以自己來安排。但是呢,無論是早還是晚,如果你想要將編程技能練得很棒,那么,二進制,八進制,十六進制的知識,以及許多的系統底層知識,你就都需要去學習了。

至于說,學習順序,自己摸索和安排吧。

結束語

本節的內容,就這么多吧。希望大家能夠學習好本節知識。

?專欄導航

上一篇:WIndows 編程輔助技能:格式工廠的使用

回到目錄

下一篇:MFC 第一章概述

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

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

相關文章

Sigma-Aldrich 細胞培養實驗方案 | 通過Hoechst DNA染色檢測細胞的支原體污染

目標DNA染色&#xff08;如間接Hoechst染色技術&#xff09;一種快速的方法&#xff0c;其可在72小時內獲得結果&#xff0c;這相較于通過培養分離檢測支原體所需的4周時間相比是更加有利的。用DNA染色劑對細胞系進行直接染色可在24小時內獲得結果&#xff0c;但會大大降低靈敏…

需求跟蹤深度解析:架構師視角下的全鏈路追溯體系

需求跟蹤&#xff08;Requirements Traceability&#xff09;是確保軟件系統從業務目標到代碼實現全程可追溯的核心實踐&#xff0c;尤其在安全關鍵系統&#xff08;如航空、醫療&#xff09;中具有強制性要求。一、需求跟蹤的四大核心價值變更影響分析 精確評估需求變更波及范…

《棒球規則介紹》領隊和主教練誰說了算·棒球1號位

Baseball 101&#xff5c;GM vs Manager 到底誰是球隊話事人&#xff1f; ??權力金字塔&#xff1a;誰說了算&#xff1f;General Manager&#xff08;總經理/GM&#xff09;球隊建筑師&#xff1a;負責選秀&#xff08;Draft&#xff09;、交易球員&#xff08;Trade&#x…

電力自動化的通信中樞,為何工業交換機越來越重要?

在“新能源數字化”雙輪驅動下&#xff0c;電力行業正經歷深刻變革&#xff0c;傳統變電站也迎來了向智能化、自動化加速轉型的時代。作為連接站內各級系統與裝置的數據“中樞”&#xff0c;工業以太網交換機已成為現代變電站自動化系統中不可或缺的核心設備。在這場深度重構的…

【Linux倉庫】命令行參數與環境變量【進程·伍】

&#x1f31f; 各位看官好&#xff0c;我是egoist2023&#xff01; &#x1f30d; Linux Linux is not Unix &#xff01; &#x1f680; 今天來學習命令行參數與環境變量的相關知識。 &#x1f44d; 如果覺得這篇文章有幫助&#xff0c;歡迎您一鍵三連&#xff0c;分享給更多…

R 數據框:深入解析及其在數據分析中的應用

R 數據框:深入解析及其在數據分析中的應用 引言 R語言作為一種強大的統計計算和圖形工具,在數據分析領域有著廣泛的應用。數據框(DataFrame)是R語言中處理數據的一種重要結構,它類似于其他編程語言中的表格或關系數據庫中的表。本文將深入解析R數據框的概念、特點、創建…

機器學習數據集劃分全指南:train_test_split詳解與實踐

目錄 一、為什么需要劃分數據集&#xff1f; 二、train_test_split基礎用法 2.1 最簡單的劃分方式 2.2 參數說明 三、實際應用案例&#xff1a;Iris數據集劃分 四、高級技巧與注意事項 4.1 分層抽樣&#xff08;Stratified Sampling&#xff09; 4.2 時間序列數據劃分 …

python-77-數據序列化框架Avro數據格式編碼和解析

文章目錄 1 avro簡介1.1 關鍵特點1.2 無需標記2 使用步驟2.1 定義Avro模式2.2 編碼Avro數據2.3 解析Avro數據3 DataFileWriter和DataFileReader3.1 寫入DataFileWriter3.2 讀取DataFileReader3 文件中存儲16進制字符串3.1 十六進制字符串3.2 代碼示例4 接收kafka中的avro數據5 …

IAR攜手矽力杰與普華基礎軟件,共推RISC-V車規芯片高安全應用落地

芯片 基礎軟件 開發工具三方協同&#xff0c;賦能國產汽車電子加速自主演進 在“軟件定義汽車”持續重塑產業格局的當下&#xff0c;構建安全、高效、可擴展的本土汽車電子生態已成為行業共識。 IAR嵌入式開發解決方案現已全面支持矽力杰SA32B系列和即將量產的SA32D系列車規…

Vscode——報錯,加載 Web 視圖時出錯: Error: Could not register service worker

Vscode——報錯完整信息 加載 Web 視圖時出錯: Error: Could not register service worker: InvalidStateError: Failed to register a ServiceWorker: The document is in an invalid state… 很有意思下班前還是好的&#xff0c;上班發現下載的Ai code 無法正常使用了 解決…

Java-Collections、Map

目錄 1.可變參數 2.Collections工具類 不同集合類型的排序方法比較 3.斗地主游戲 4.Map集合 4.1 Map集合概述 4.2 Map集合的常用方法 4.3 Map集合的遍歷方式 4.4 Map集合案例—統計投票人數 4.5 HashMap 4.6 LinkedHashMap 4.7 TreeMap 5.集合的嵌套 1.可變參數 import …

開源界迎來重磅核彈!月之暗面開源了自家最新模型 K2

1. 模型簡介 Kimi K2 是一款尖端專家混合&#xff08;MoE&#xff09;語言模型&#xff0c;激活參數量達320億&#xff0c;總參數量突破1萬億。該模型采用Muon優化器訓練&#xff0c;在前沿知識、推理和編程任務中展現出卓越性能&#xff0c;同時針對智能體能力進行了精細化優…

Grok-4 發布會圖文總結

文章目錄00:00 - Grok-4&#xff1a;以“全球最智能 AI”之名突破性登場06:41 - 推理能力的大幅飛躍&#xff1a;100 倍訓練量鑄就的“博士級”大腦13:25 - 工具使用能力的革新&#xff1a;從“原始”到深度整合20:06 - 直面強化學習的挑戰與 AI 的終極測試26:45 - 應用演示&am…

AI產品經理面試寶典第1天:機器學習核心算法全景解析

面試官:請解釋什么是監督學習?能否用生活案例說明其運作邏輯? 監督學習如同教孩子識字的過程。父母指著"蘋果"圖片反復說"這是蘋果"(帶標簽的訓練數據),孩子逐漸建立"紅色圓形水果=蘋果"的認知模型(算法生成)。當孩子看到新圖片時,模型…

前端開發技術棧概覽

前端開發技術棧概覽 前端開發是創建Web頁面或app等前端界面給用戶的過程&#xff0c;從簡單的靜態頁面到復雜的單頁應用(SPA)&#xff0c;前端技術棧經歷了快速的演進。以下是前端開發所需掌握的核心技術分類及相關知識點&#xff1a; 1. 基礎層&#xff1a;HTML、CSS、JavaScr…

詳解Kafka通過冪等性實現分區消息不重復的機制

一、核心機制&#xff1a;PID與序列號1. Producer ID (PID)唯一標識&#xff1a;每個生產者實例啟動時&#xff0c;由Kafka Broker分配一個全局唯一的PID&#xff0c;用于標識消息來源。持久化存儲&#xff1a;PID由Broker持久化保存&#xff0c;確保生產者重啟后仍能追蹤歷史狀…

壓縮包方式在centos7版本上安裝mysql8.0

使用tar命令解壓 tar -zxvf mysql-8.0.32-el7-x86_64.tar.gz -C /usr/local/到/usr/local/修改解壓后的文件名為mysql 創建mysql用戶組和用戶&#xff0c;自己在mysql下面創建data目錄存儲信息&#xff0c;把權限交給mysql這個用戶 groupadd mysql useradd -r -g mysql mysql c…

使用ansible給被管理節點安裝docker

在跳板機上安裝ansible,再通過ansible的playbook,給被管理節點安裝docker。 跳板機配置 實驗環境 華為云上按需開兩臺2核2G的Ubuntu的ECS&#xff1b;2臺公網IP為5Mbit/s&#xff0c;按需按流量&#xff1b;2臺服務器在一個子網內;跳板機和被管理節點主機分別掛不通的安全組 在…

《Java EE與中間件》實驗三 基于Spring Boot框架的購物車

目 錄 一、實驗目的和要求 二、實驗實現思路及步驟 1、實驗思路 2、實驗步驟 3、實驗方案 三、主要開發工具 四、實驗效果及實現代碼 1、購物車數據庫構建實現 &#xff08;1&#xff09;建立javaee-project數據庫 &#xff08;2&#xff09;建立t_cart數據表 &…

DAS3D: Dual-modality Anomaly Synthesis for 3D Anomaly Detection 論文精讀

題目&#xff1a;DAS3D: Dual-modality Anomaly Synthesis for 3D Anomaly Detection 題目&#xff1a;DAS3D&#xff1a;用于三維異常檢測的雙模態異常合成 論文地址&#xff1a;ECCVW 2024 2410 Dual-modality 雙模態 Anomaly Synthesis 異常合成 for 3D Anomaly Detection…