《深入理解计算机系统》 第三版

第二遍读这本书,每周花两到三小时时间,能读多少读多少(这次看了 22 ~ 28 页)

第一遍对应笔记链接 https://www.cnblogs.com/stone94/p/9824395.html

计算机中存储整数时,一般都是以补码的形式存储的

因为使用补码计算的话,计算机可以不用判断符号位(直接把所有位的值都当做数值),可以用加法去替代减法(少了一种算法)

对于虚拟地址和虚拟地址空间不大理解,先把相关内容摘抄下来:

“机器级程序将内存视为一个非常大的字节数组,称为虚拟地址(virtual memory)。内存的每个字节都由一个唯一的数字来标识,称为它的地址(address),所有可能地址的集合就称为虚拟地址空间(virtual address space)。顾名思义,这个虚拟地址空间只是一个展现给机器级程序的概念性映像。”

“每台计算机都有一个字长(word size),指明指针数据的标称大小(normal size)。因为虚拟地址是以这样的一个字来编码的,所以字长决定的最重要的系统参数就是虚拟地址空间的最大大小。也就是说,对于一个字长为 w 位的机器而言,虚拟地址的范围为 0~2^w-1,程序最多访问 2^w 个字节”

这里能看懂,但是不能用自己的话说出来

由于对 C 语言不是太熟,特别记录下 C 语言中的指针声明:

对于任何数据类型 T,声明

T *p;

表明 p 是一个指针变量,指向一个类型为 T 的对象。例如,

char *p

就将一个指针声明为指向一个 char 类型的对象。

“程序员应力图使他们的程序在不同的机器和编译器上可移植。可移植性的一个方面就是使程序对不同数据类型的确切大小不敏感。C 语言标准对不同数据类型的数字范围设置了下届,但是却没有上届。因为从 1980 年左右到 2010 年左右,32 位机器和 32 位程序是主流的组合。随着 64 位机器的日益普及,在将这些程序移植到新机器上时,许多隐藏的对字长的依赖性就会显现出来,成为错误。比如,许多程序员假设一个声明为 int 类型的程序对象能被用来存储一个指针。这在大多数 32 位的机器上能正常工作,但是在一台 64 位的机器上却会导致问题。”

我的理解:

int 无论在 32 位还是 64 位机器上,都是 4 个字节,即 32 位
而虚拟地址的范围则由一个字长决定,即,在 64 位机器上,虚拟地址的范围是 0~2^64-1,而指针中存储的是虚拟地址值,所以在 64 位机器中,不能用 int 来存储指针。

疑问:

十六进制表示法具体是在什么地方使用?是只在机器级程序中使用吗?

有哪些程序是机器级程序?机器级程序是指汇编程序吗?

32 位字长限制虚拟地址空间为 4GB,可以理解为在 32 位机器上,一个程序最多可以把 4GB 的数据加载进内存吗?

深入理解计算机系统 第二章 信息的表示和处理 Part1 第二遍的更多相关文章

  1. 深入理解计算机系统 第二章 信息的表示和处理 Part2 第二遍

    <深入理解计算机系统> 第三版 第二遍读这本书,每周花两到三小时时间,能读多少读多少(这次看了 29 ~ 34 页) 第一遍对应笔记链接 https://www.cnblogs.com/s ...

  2. 深入理解计算机系统 第二章 信息的表示和处理 part1

    欣哥划的重点: 第二章比较难,建议至少掌握下面几个知识点: 1. 字节顺序 : 大端和小端 2. 运行 图2-24, 图2-25程序 show-bytes.c 观察结果,看看有什么问题 3. 理解布尔 ...

  3. 深入理解计算机系统 第二章 信息的表示和处理 part2

      上一周遗留问题的解决 问题:原码.反码.补码是只针对有符号数吗?无符号数有没有这三种编码方式? 得到的答案:对于无符号数,原码.反码和补码是一致的 进一步,由于有符号数是以补码的形式存储在计算机中 ...

  4. 深入理解计算机系统 第九章 虚拟内存 Part1 第二遍

    这次花了4小时40分钟,看了第 559~575 页,共 17 页 第一遍对应地址 https://www.cnblogs.com/stone94/p/10264044.html 注意:本章的练习题一定 ...

  5. 深入理解计算机系统 第三章 程序的机器级表示 Part1 第二遍

    第一遍对应笔记链接 https://www.cnblogs.com/stone94/p/9905345.html 机器级代码 计算机系统使用了多种不同形式的抽象,利用更简单的抽象模型来隐藏实现的细节. ...

  6. [CSAPP笔记][第二章信息的表示和处理]

    信息的表示和处理 2.1 信息存储 机器级程序将存储器视为一个非常大的字节数组,称为虚拟存储器. 存储器的每个字节由一个唯一的数字表示,称为它的地址 所有可能地址的集合称为虚拟地址空间 2.1.1 十 ...

  7. 深入理解计算机系统 Start && 第一章要点

    对此书已经慕名已久了,抽空看了第1,2,3,5章,其他章节等有空闲继续看吧. 我的许多博客是给自己快速复习使用的,比如此读书后感,你可以根据我下面的建议读完原书几章再回来复习一下(或许那时候就没必要回 ...

  8. 《深入理解计算机系统V2》学习指导

    <深入理解计算机系统V2>学习指导 目录 图书简况 学习指导 第一章 计算机系统漫游 第二章 信息的表示和处理 第三章 程序的机器级表示 第四章 处理器体系结构 第五章 优化程序性能 第六 ...

  9. 《深入理解计算机系统》实验一 —Data Lab

    本文是CSAPP第二章的配套实验,通过使用有限的运算符来实现正数,负数,浮点数的位级表示.通过完成这13个函数,可以使我们更好的理解计算机中数据的编码方式. 准备工作   首先去官网Lab Assig ...

随机推荐

  1. CH3803扑克牌

    Description 背景 lqhsr生日那天,Rainbow来找lqhsr玩扑克牌-- 玩着玩着Rainbow觉得太没意思了,于是决定给lqhsr一个考验~~~ 描述 Rainbow把一副扑克牌( ...

  2. angular之跨域

    一.什么是跨域? 跨域是指一个域下的文档或者脚本去请求另一个域下的资源.(广义) 广义的跨域: 1.资源跳转:链接跳转.重定向.表单提交. 2.资源嵌入:<link>.<script ...

  3. [HNOI2007] 理想正方形 二维ST表

    题目描述 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入输出格式 输入格式: 第一行为3个整数,分别表示a,b,n的值 第二行至 ...

  4. java命令行导出、导入sql文件

    @IocBean public class SqlCommandModel{ //用户名 @Inject("java:$conf.get('jdbc.username')") pr ...

  5. 常用函数-Win-IP

    //************************************************************************* // 函数名: GetAppPath // 返回 ...

  6. python-利用freeze生成requirements文件

    使用场景:本地电脑开发完成的python自动化项目,需要导出python相关的依赖包以便后续迁移项目使用. C:\Users\acer>e: E:\>pip freeze >requ ...

  7. 5. Sersync实时同步

    rsync+Sersync数据的实时同步 sersync介绍 1.什么是实时同步 监控一个目录的变化, 当该目录触发事件(创建\删除\修改) 就执行动作, 这个动作可以是 rsync同步 ,也可以是其 ...

  8. SpringMvc启动源码解析

    1. 前言 上篇文章介绍了Spring容器的初始化https://www.cnblogs.com/xiaobingblog/p/11738747.html,接下来介绍SpringMvc容器的初始化 2 ...

  9. IDE安装完成无法打开,报错Fail load JVM DLL 问题与解决方案

    安装完成pycharm 在打开pycharm的时候出现报错 Fail load JVM DLL xxxx xxx. 解决方案 安装Microsoft Visual C++ 2010 Redistrib ...

  10. 使用eclipse在tomcat中设置项目启动的虚拟路径

    很多时候我们在启动项目的时候都会在浏览器输入"localhost:+端口号+项目名称" 其实tomcat是可以省去这种麻烦的,通过设置项目的虚拟路径就可访问项目了 第一步 选择ec ...