CSAPP:信息的表和处理1

关键点:寻址、内存、磁盘、虚拟地址、物理地址、整型数组。

信息存储中的几个概念整型数据类型无符号数有符号数几个概念有符号数与无符号数之间转换基于栈与基于寄存器的区别

信息存储中的几个概念

内存
  内存也被称为内存储器,其作用是用于暂时存放CPU中运算的数据,计算机中的所有程序都在内存中运行。包括只读存储器(ROM:闪存、磁盘)、随机存储器(DRAM:动态随机存储器、SRAM:静态随机存储器)和高速缓冲存储器(cache)。

  • 物理内存
      真实的硬件设备(内存条)
  • 虚拟内存
      操作系统给应用程序制造了一个假象,让每个应用程序认为自己独享4G(假设32位cpu),这个4G是一个虚拟地址空间。操作系统复负责内存管理,完成物理内存与虚拟内存之间的映射

地址
  如果把内存比作一个个小房间,那么地址就是每个房间的编号。地址总线决定寻址范围,32位CPU寻址范围位0x00000000~0xFFFFFFFF(4G)

寻址和字节顺序

  • 小端模式(little endian):低地址存放低字节,高地址存放高字节。大多数Intel都是小端模式
1int x = 0x01234567;
2char *p =(char *)&x;
3printf("%d\r\n",*p);
4*p = 0x67;
5*(p+1) = 0x45;
6*(p+2) = 0x23;
7*(p+3) = 0x01;
  • 大端模式(big endian):低地址存放高字节,高地址存放低字节。
1int x = 0x01234567;
2char *p =(char *)&x;
3printf("%d\r\n",*p);
4*p = 0x01;
5*(p+1) = 0x23;
6*(p+2) = 0x45;
7*(p+3) = 0x67;
  • 字节顺序:大小端模式可能造成的问题
  1. 网络字节序
  2. 强制类型转换或者联合(union)需要注意。

整型数据类型

无符号数

  假设一个整数数据类型有w位。则其数据范围位为0~。32位平台下long = int ,64位平台下long站8位。

32位平台

数据类型 位数 最小值 最大值
unsigned char 8 0 255
unsigned short 16 0 65535
unsigned int 32 0 4294967295
unsigned long 32 0 4294967295
uint32_t 32 0 4294967295
uint64_t 64 0 18446744073709551615

64位平台

数据类型 位数 最小值 最大值
unsigned char 8 0 255
unsigned short 16 0 65535
unsigned int 32 0 4294967295
unsigned long 64 0 18446744073709551615
uint32_t 32 0 4294967295
uint64_t 64 0 18446744073709551615

有符号数

  假设一个整数数据类型有w位。则其数据范围位为~.有符号数+无符号数 =

32位平台

数据类型 位数 最小值 最大值
char 8 -128 127
short 16 -32768 32767
int 32 -2147483648 2147483647
long 32 -2147483648 2147483647
int32_t 32 -2147483648 -2147483647
int64_t 64 -9223372036854775808 9223372036854775808

64位平台

数据类型 位数 最小值 最大值
char 8 -128 127
short 16 -32768 32767
int 32 -2147483648 2147483647
long 64 -9223372036854775808 9223372036854775808
int32_t 32 -2147483648 2147483647
int64_t 64 -9223372036854775808 9223372036854775808

几个概念

  数值在计算机中都是以补码形式存在的。

  • 原码:符号位加上真值的绝对值。即第一位表示符号位,其余位表示值
  • 反码:正数反码等于其原码(本身),负数反码在其原码基础上,符号位不变,其余各位取反。
  • 补码:整数补码等于本身,负数 = 反码 + 1。
数值 原码 反码 补码
85 01010101 01010101 01010101
-85 11010101 10101010 10101011

有符号数与无符号数之间转换

  实际上是无符号数与补码之间的转换。-85 = 10101011 = 171U。一个w位的有符号数,假设其值位X(负数),其对应的无符号值为Y,则有:

基于栈与基于寄存器的区别

  • 可移植性:基于寄存器的CPU架构,依赖于平台,寄存器指令不同。
  • 不用考虑寄存器分配问题:基于栈的架构,不用考虑寄存器

CSAPP:信息的表和处理1的更多相关文章

  1. CSAPP:信息的表和处理2

    CSAPP:信息的表和处理2 关键点:浮点数.浮点数运算. 二进制小数IEEE浮点数表示浮点数转换(单精度)参考 二进制小数   形如表示的二进制数,其中每个位的取值范围位0和1.这种表示方式的定义如 ...

  2. 【原创】C#搭建足球赛事资料库与预测平台(4) 比赛信息数据表设计

            本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新 开源C#彩票数据资料库系列文章总目录:[目录]C#搭建足球赛事资料库与预测平台与彩票数据分析目录 本篇文章开始将逐步介 ...

  3. usb由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个硬件设备

    在设备管理器的usb设备的属性中,显示提示“由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个硬件设备”.注册表坏了.经过查询,解决方法如下: 方法:打开注册表编辑器(开始--& ...

  4. SQL查询数据库信息, 数据库表名, 数据库表信息

    SQL查询数据库信息, 数据库表名, 数据库表信息 ---------------------------------------------- -- 以下例子, 在sql_server 中可以直接运 ...

  5. [z]dbms_stats.lock_table_stats对于没有统计信息的表分区同样有效

    常见的分区表DDL如 split partition.add partition都会生成没有统计信息的表分区table partition,长期以来我对dbms_stats.lock_table_st ...

  6. 查看mysql 库信息和表结构与表创建方法

    一.查看基础信息 1.查看数据库存储位置 show global variables like "%datadir%"; 2.查看数据库的版本 select version(); ...

  7. destoon 信息发布表单提交验证

    sell 模块的form表单如下: <form method="post" id="dform" action="?" target= ...

  8. Dynamics 365客户端编程示例:获取当前用户的信息,表单级通知/提示,表单OnLoad事件执行代码

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  9. SQL 从指定表筛选指定行信息 获取表行数

    1.获取指定表的行数 --获取表中数据行数 --select max([列名]) from 表名 2.筛选指定表的指定行数据(数据表分页获取) http://www.cnblogs.com/morni ...

随机推荐

  1. 【Linux命令】ps命令

    ps命令介绍 用于报告当前系统的进程状态.可以搭配kill指令随时中断.删除不必要的程序. ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态.进程是否结 ...

  2. Java从URL获取PDF内容

    Java直接URL获取PDF内容 题外话 网上很多Java通过pdf转 HTML,转文本的,可是通过URL直接获取PDF内容,缺没有,浪费时间,本人最近工作中刚好用到,花了时间整理下,分享出来,防止浪 ...

  3. Android Service解析

    Android Service是一个可以在后台执行长时间运行操作而不提供用户界面的应用组件,它分为两种工作状态,一种是启动状态,主要用于执行后台计算:另一种是绑定状态,主要用于其他组件和Service ...

  4. 对比JavaScript中的Continue和Break

    译者按: 最好是不用,不过基础知识要掌握. 原文: JavaScript: Continue vs Break - Learn the difference between the continue ...

  5. 真实世界的脉络].(英)戴维.多伊奇.pdf

    [真实世界的脉络].(英)戴维.多伊奇.pdf 宇宙.时间.生命.等等,如果用量子物理学.计算机科学.进化论.认识论将这些最基本而又复杂的问题纠缠在一起时,那将会是一幅什么样的图景呢?也许,我们穷尽一 ...

  6. Django-Oscar小记:如何使用高版本Django开发网页的SEO模块

    在使用Google搜索Django的SEO插件时,很多插件都没有更新到Python3.x,有的插件更新到了Python的高版本,但是不适用于Django的2.x. Django在升级到版本2.x的时候 ...

  7. js 实现二级联动

    onchange 事件 <body> <select id="province" onchange="func1()"> <opt ...

  8. K8S 容器的资源需求、资源限制

    容器的资源需求,资源限制 requests:需求,最低保障: limits:限制,硬限制: CPU: 1 颗逻辑 CPU 1=1000,millicores 500m=0.5CPU QoS: Gura ...

  9. spring boot 集成 redis lettuce

    一.简介 spring boot框架中已经集成了redis,在1.x.x的版本时默认使用的jedis客户端,现在是2.x.x版本默认使用的lettuce客户端,两种客户端的区别如下 # Jedis和L ...

  10. net core webApi返回值

    1 多个参数采用结构的形式,如class xyz 2 返回值使用IActionResult 控制,不能使用httpRequestMessage类型 3 url为路由名称+Controller前缀 如下 ...