Skip to content

Commit

Permalink
Site updated: 2020-07-08 14:33:36
Browse files Browse the repository at this point in the history
  • Loading branch information
Vinkle-hzt committed Jul 8, 2020
1 parent 9be1571 commit 46d7b68
Show file tree
Hide file tree
Showing 10 changed files with 23 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -237,14 +237,14 @@

<h2 id="2-1-信息储存"><a href="#2-1-信息储存" class="headerlink" title="2.1 信息储存"></a>2.1 信息储存</h2><p>​ 大多数计算机使用8位的块,或者<strong>字节(byte)</strong>,作为最小的可寻址的内存单位,而不是访问内存中单独的位。机器级的程序将内存视为一个非常大的字节数组,称为<strong>虚拟内存(virtual memory)</strong>。内存的每个字节都由一个唯一的数字来标识,称为它的<strong>地址(address)</strong>,所有可能的地址的集合就称为<strong>虚拟地址空间(virtual address space)。</strong>虚拟地址空间只是一个展现给机器级程序的概念性映像,实际的实现是将动态随机访问存储器(DRAM)、闪存、磁盘存储器、特殊硬件和操作系统软件结合起来,为程序提供一个看上去统一的字节数组。</p>
<h3 id="十六进制表示法"><a href="#十六进制表示法" class="headerlink" title="十六进制表示法"></a>十六进制表示法</h3><p>​ 一个字节有8位组成。在二进制表示法中,它的值域是$00000000_2\sim 11111111_2$。如果看成十进制整数,它的值域就是$0_{10}\sim255_{10}$。两种符合表示法对于表述位模式都不是很方便所以引入了<strong>十六进制(hexadecimal)</strong>表示法。用十六进制书写,一个字节的值域为$00_{16}\sim FF_{16}$。</p>
<p><img src="https://vinkle-image-1302582473.cos.ap-shanghai.myqcloud.com/artical/csapp-2/1.png" srcset="/img/loading.gif" alt="十六进制表示法"></p>
<p><img src="https://vinkle-image-1302582473.cos.ap-shanghai.myqcloud.com/artical/csapp-2-1/1.png" srcset="/img/loading.gif" alt="十六进制表示法"></p>
<p>​ 在C语言中,以 <code>0x</code><code>0X</code>开头的数字常量为被认为是十六进制的值。</p>
<h3 id="字数据的大小"><a href="#字数据的大小" class="headerlink" title="字数据的大小"></a>字数据的大小</h3><p>​ 每台计算机都有一个<strong>字长(word size)</strong>,指明指针数据的标称大小(nominal size)。因为,虚拟地址是以这样的一个字节来编码的,所以字长决定的最重要的系统参数就是虚拟地址空间的最大大小。也就是说,对于一个字长为 $w$位对的机器而言,虚拟地址的范围为$0$~$2^w-1$,程序最多访问$2^w$个字节。</p>
<p><img src="https://vinkle-image-1302582473.cos.ap-shanghai.myqcloud.com/artical/csapp-2/2.png" srcset="/img/loading.gif" alt="基本C数据类型的典型大小"></p>
<p><img src="https://vinkle-image-1302582473.cos.ap-shanghai.myqcloud.com/artical/csapp-2-1/2.png" srcset="/img/loading.gif" alt="基本C数据类型的典型大小"></p>
<h3 id="寻址和字节顺序"><a href="#寻址和字节顺序" class="headerlink" title="寻址和字节顺序"></a>寻址和字节顺序</h3><p>​ 对于跨越多字节的程序对象,我们必须建立两个原则:这个对象的地址是什么,以及在内存中如何排列这些字节。在几乎所有的机器上,多字节对象都被存储为连续的字节序列,对象的地址为所使用字节中最小的地址。</p>
<p>​ 排列表示一个对象的字节有两个通用的规则。考虑一个$w$位的整数,其位表示为$[x_{w-1},x_{w-2},···,x_1,x_0]$,其中$x_{w-1}$是最高有效位,而$x_0$是最低有效位。假设$w$是8的倍数,这些为就能被分组成为字节,其中最高有效字节包含位$[x_{w-1},x_{w-2},···,x_{w-8}]$,而最低有效字节包含位$[x_7,x_6,x_5,x_4,x_3,x_2,x_1,x_0]$,其他字节包含中间的位。某些机器选择在内存中按照从最低有效字节的顺序储存。前一种规则——最低有效字节在最前面的方式,称为<strong>小端法(little endian)</strong>。后一种规则——最高有效字节在最前面的方式,称为<strong>大端法(big endian)</strong></p>
<p>​ 假设变量 x的类型为 <code>int</code>,位于地址 <code>0x100</code>处,它的十六进制值为 <code>0x01234567</code>。地址范围<code>0x100</code>~<code>0x103</code>的字节顺序依赖于机器的类型:</p>
<p><img src="https://vinkle-image-1302582473.cos.ap-shanghai.myqcloud.com/artical/csapp-2/3.png" srcset="/img/loading.gif" alt="大端法和小端法"></p>
<p><img src="https://vinkle-image-1302582473.cos.ap-shanghai.myqcloud.com/artical/csapp-2-1/3.png" srcset="/img/loading.gif" alt="大端法和小端法"></p>
<p>​ 对于大多数应用程序员来说,其机器所使用的的字节顺序是完全不可见的。无论为哪种类型的机器所编译的程序都会得到同样的结果。不过有时候,字节顺序会成为问题。首先是在不同类型的机器之间通过网络传送二进制数据是,一个常见的问题是当小端法机器及其产生的数据被发送到大端法机器(或者反过来),接受程序会发现,字里的字节成了反序的,为了避免这类问题,网络应用程序的代码编写必须遵守已建立的关于字节顺序的规则,以确保发送方机器将它的内部表示转换为网络标准,而接收方则将网络标准转换为它的内部表示。</p>
<p>第二种情况是,当阅读表示证书数据的字节序列是字节顺序也很重要。</p>
<p>第三种情况是,当编写规避正常的类型的程序时,字节顺序很重要。在C语言中,可以通过<strong>强制类型转换(cast)</strong><strong>联合(union)</strong>来允许以一种数据类型引用对象,而这种数据类型与创建这个对象是定义的数据类型不同。大多数应用编程都强烈不推荐这种编码技巧,但是他们对系统级编程来说是非常有用,甚至是必需的。</p>
Expand All @@ -253,7 +253,7 @@ <h3 id="表示代码"><a href="#表示代码" class="headerlink" title="表示
<p>​ 计算机系统的一个基本概念就是,从机器的角度来看,程序仅仅只是字节序列。机器没有关于原始程序的任何信息,除了可能有些用来帮助调试的辅助表以外。</p>
<h3 id="布尔代数简介"><a href="#布尔代数简介" class="headerlink" title="布尔代数简介"></a>布尔代数简介</h3><p>​ 二进制是计算机编码、存储和操作信息的核心,所以围绕数值0和1的研究已经演化出了丰富的数学知识体系。</p>
<p>​ 最简单的布尔代数实在二元集合${0,1}$基础上的定义,布尔运算 $\sim$ 对应于逻辑运算 NOT,在命题逻辑中用符号 $\neg$ 表示。也就是说,$P$ 不为真时,$\neg P$ 为真,反之亦然。 相应地, 当 $P$ 等于0时,$\sim P$ 等于 1,反之亦然。布尔运算 $\&amp;$ 对应于逻辑运算 AND, 在命题逻辑中用符号 $\wedge$ 表示。当 $P$ 和 $Q$ 都为真时,我们说 $P\wedge Q$ 为真。相应的,只有当 $p=1$ 且 $q=1$ 时,$p\&amp; q$ 才等于1。布尔运算 $|$ 对应与逻辑运算 OR, 在命题逻辑中用符号 $\vee$ 表示。 当 $P$ 或者 $Q$ 为真时,我们说 $ P\vee Q$ 成立。相应地,当 $p=1$ 或者 $q=1$ 时,$p| q$ 等于1。布尔运算 $\hat{}$ 对应逻辑运算异或,在命题逻辑中用符号 $\oplus$ 表示。 当 $P$ 或者 $Q$ 为真但不同时为真时,我们说 $ P\oplus Q$ 成立。当 $p=1$ 且 $q=0$,或者 $p=0$ 且 $q=1$, $p\hat{} q$ 等于1。</p>
<p><img src="https://vinkle-image-1302582473.cos.ap-shanghai.myqcloud.com/artical/csapp-2/4.png" srcset="/img/loading.gif" alt="布尔代数的运算"></p>
<p><img src="https://vinkle-image-1302582473.cos.ap-shanghai.myqcloud.com/artical/csapp-2-1/4.png" srcset="/img/loading.gif" alt="布尔代数的运算"></p>
<p>我们可以将上述4个布尔运算扩展到<strong>位向量</strong>的运算,位向量就是固定长度为$w$、由0和1组成的串。位向量的运算可以定义成参数的每个对应元素之间的运算。假设 $a$ 和 $b$ 分别表示位向量 $[a_{w-1},a_{w-2},···,a_0]$ 和 $[b_{w-1},b_{w-2},···,b_0]$。 我们将 $a\&amp;b$ 也定义为一个长度为 $w$ 的位向量,其中第 $i$ 个元素等于 $a_i\&amp; b_i$,$0\leqslant i &lt; w$。可以用类似的方式将运算 $|$ 、$\hat{}$ 和 $\sim$ 拓展到位运算上。</p>
<p>位向量是一个很有用的应有就是表示有限集合。我们可以用位向量 $[a_{w-1},a_{w-2},···,a_0]$ 编码任何子集 $A\subseteq {0,1,···,w-1 }$,其中 $a_i = 1$ 当且仅当 $i\in{A}$。</p>
<h3 id="C语言中的位级运算"><a href="#C语言中的位级运算" class="headerlink" title="C语言中的位级运算"></a>C语言中的位级运算</h3><p>​ C语言的布尔运算符号:<code>|</code> OR(或),<code>&amp;</code> AND(与),<code>~</code> NOT(取反),<code>^</code> EXCLUSIVE-OR(异或)。</p>
Expand Down
2 changes: 1 addition & 1 deletion 2020/07/07/cpp_virtual_function/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -324,7 +324,7 @@ <h2 id="虚函数的实现"><a href="#虚函数的实现" class="headerlink" tit
<div class="post-prev col-6">


<a href="/2020/07/07/CSAPP_2/">
<a href="/2020/07/07/CSAPP_2_1/">
<i class="iconfont icon-arrowleft"></i>
<span class="hidden-mobile">CSAPP-2.1 信息表示和处理-信息储存</span>
<span class="visible-mobile">上一篇</span>
Expand Down
2 changes: 1 addition & 1 deletion archives/2020/07/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@

<p class="h5">2020</p>

<a href="/2020/07/07/CSAPP_2/" class="list-group-item list-group-item-action">
<a href="/2020/07/07/CSAPP_2_1/" class="list-group-item list-group-item-action">
<span class="archive-post-title">CSAPP-2.1 信息表示和处理-信息储存</span>
<span style="float: right;">07-07</span>
</a>
Expand Down
2 changes: 1 addition & 1 deletion archives/2020/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@

<p class="h5">2020</p>

<a href="/2020/07/07/CSAPP_2/" class="list-group-item list-group-item-action">
<a href="/2020/07/07/CSAPP_2_1/" class="list-group-item list-group-item-action">
<span class="archive-post-title">CSAPP-2.1 信息表示和处理-信息储存</span>
<span style="float: right;">07-07</span>
</a>
Expand Down
2 changes: 1 addition & 1 deletion archives/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@

<p class="h5">2020</p>

<a href="/2020/07/07/CSAPP_2/" class="list-group-item list-group-item-action">
<a href="/2020/07/07/CSAPP_2_1/" class="list-group-item list-group-item-action">
<span class="archive-post-title">CSAPP-2.1 信息表示和处理-信息储存</span>
<span style="float: right;">07-07</span>
</a>
Expand Down
2 changes: 1 addition & 1 deletion categories/CSAPP/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@

<p class="h5">2020</p>

<a href="/2020/07/07/CSAPP_2/" class="list-group-item list-group-item-action">
<a href="/2020/07/07/CSAPP_2_1/" class="list-group-item list-group-item-action">
<span class="archive-post-title">CSAPP-2.1 信息表示和处理-信息储存</span>
<span style="float: right;">07-07</span>
</a>
Expand Down
14 changes: 7 additions & 7 deletions categories/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@
<div class="category row">
<a
class="category-item collapsed list-group-item category-item-action col-10 col-md-11"
id="heading-ckccz91me0003hovp3dis21r1" role="tab" data-toggle="collapse" href="#collapse-ckccz91me0003hovp3dis21r1"
id="heading-ckcczk5290003usvp3zg1h925" role="tab" data-toggle="collapse" href="#collapse-ckcczk5290003usvp3zg1h925"
aria-expanded="false"
>
CSAPP
Expand All @@ -200,14 +200,14 @@
<div class="category-collapse">


<div id="collapse-ckccz91me0003hovp3dis21r1" class="collapse in" role="tabpanel"
aria-labelledby="heading-ckccz91me0003hovp3dis21r1">
<div id="collapse-ckcczk5290003usvp3zg1h925" class="collapse in" role="tabpanel"
aria-labelledby="heading-ckcczk5290003usvp3zg1h925">





<a href="/2020/07/07/CSAPP_2/" class="list-group-item list-group-item-action">
<a href="/2020/07/07/CSAPP_2_1/" class="list-group-item list-group-item-action">
<span class="category-post">CSAPP-2.1 信息表示和处理-信息储存</span>
</a>

Expand All @@ -230,7 +230,7 @@
<div class="category row">
<a
class="category-item collapsed list-group-item category-item-action col-10 col-md-11"
id="heading-ckccz91mk000ahovpaf6h7o4d" role="tab" data-toggle="collapse" href="#collapse-ckccz91mk000ahovpaf6h7o4d"
id="heading-ckcczk52e000ausvp6gdi0ci8" role="tab" data-toggle="collapse" href="#collapse-ckcczk52e000ausvp6gdi0ci8"
aria-expanded="false"
>
C++
Expand All @@ -243,8 +243,8 @@
<div class="category-collapse">


<div id="collapse-ckccz91mk000ahovpaf6h7o4d" class="collapse in" role="tabpanel"
aria-labelledby="heading-ckccz91mk000ahovpaf6h7o4d">
<div id="collapse-ckcczk52e000ausvp6gdi0ci8" class="collapse in" role="tabpanel"
aria-labelledby="heading-ckcczk52e000ausvp6gdi0ci8">



Expand Down
6 changes: 3 additions & 3 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -180,15 +180,15 @@


<div class="col-12 col-md-4 m-auto index-img">
<a href="/2020/07/07/CSAPP_2/" target="_self">
<a href="/2020/07/07/CSAPP_2_1/" target="_self">
<img src="https://vinkle-image-1302582473.cos.ap-shanghai.myqcloud.com/cover/csapp.jpg" srcset="/img/loading.gif" alt="CSAPP-2.1 信息表示和处理-信息储存">
</a>
</div>

<div class="col-12 col-md-8 mx-auto index-info">
<a class="index-header" href="/2020/07/07/CSAPP_2/">CSAPP-2.1 信息表示和处理-信息储存</a>
<a class="index-header" href="/2020/07/07/CSAPP_2_1/">CSAPP-2.1 信息表示和处理-信息储存</a>

<a href="/2020/07/07/CSAPP_2/" class="index-excerpt">
<a href="/2020/07/07/CSAPP_2_1/" class="index-excerpt">



Expand Down
Loading

0 comments on commit 46d7b68

Please sign in to comment.