专栏导航

上一篇: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…