首页 > 其他分享 >CSAPP随笔:信息的存储

CSAPP随笔:信息的存储

时间:2023-01-29 21:56:28浏览次数:41  
标签:右移 CSAPP 字节 show int void 存储 随笔 pointer

 1.  可寻址的最小内存单位:字节。

 2. 虚拟内存:一个极其大的字节数组。

 3. 地址:用唯一的数字标识内存的每个字节。

 4. 虚拟地址空间: 所有可能地址的集合。

 5. c语言中指针的值都是某个存储块第一个字节的虚拟地址。编译器将每个指针和类型信息联系起来,根据指针类型生成不同的机器级别代码来访问存储在指针所指向位置的值,实际生成的机器代码不包含数据类型信息。

 6. 字:指明指针数据的标称大小,虚拟地址以字来进行编码的。决定虚拟空间的最大大小,位于 字长 w位的机器而言, 范围为 0~2w-1 。

 7.  int32_t 及int_64的数据大小都是固定的:分别为4字节及8字节。

 8. 除了char类型外,默认不加 unsigned 的都表示的有符号,char 默认为 unsigned char。

 9. 多字节的程序对象: 对象地址是?在内存中字节是如何排列的?

 10. 地址向索引值增大的方向增长,大端:数据的最高有效字节在地址的最高有效位处。 小端:数据的最低有效字节在地址的最高有效位处。 这里 是 有效字节, 所以会8位8位的比较,0x1234对应的小端存储为0x3412 大端为0x1234。

#####打印程序对象的字节表示#####
#include <iostream>
#include <stdio.h>

using namespace std;

typedef unsigned char *byte_pointer;

void show_bytes(byte_pointer start, size_t len)
{
    size_t i;
    for(int i = 0; i < len; ++i)
    {
        printf(" %.2x", start[i]);        
    }
    printf("\n");
}

void show_int(int x)
{
    show_bytes((byte_pointer) &x, sizeof(int));
}

void show_float(float x)
{
    show_bytes((byte_pointer)&x,sizeof(float));
}

void show_pointer(void *x)
{
    show_bytes((byte_pointer)&x, sizeof(void*));
}

void test_show_bytes(int val)
{
    int ival = val;
    float fval = (float)val;
    int *pval = &ival;
    show_int(ival);
    show_float(fval);
    show_pointer(pval);
}

int main()
{
    int val = 12345;
    test_show_bytes(val);
    return 0;
}

 显示发现:整型 浮点型的值与书中内容一致,指针的不同,是由于为8字节,同时,不同的机器/操作系统配置使用的存储分配规则是不同的。

 11. 计算机系统中右移分为两种情况,逻辑右移,算术右移,算术右移的高位补符号位,逻辑右移补0,一般情况下,有符号数使用的是算术右移,无符号为逻辑右移。

 12. 其中移位运算的优先级要低于加减,因此,1 << 2 + 1 并不等于5 而是8 ,需要(1 << 2)+ 1,加上括号。 

标签:右移,CSAPP,字节,show,int,void,存储,随笔,pointer
From: https://www.cnblogs.com/fourmi/p/17069209.html

相关文章

  • 实现kubernetes基于ceph块存储和cephfs的数据持久化
      ceph对接k8s使用案例  k8s节点安装ceph-common  分别在k8smaster与各node节点安装ceph-common组件包。  下载ceph仓库key文件root@master1:~/yam......
  • 初识C语言随笔
    常量:1.不变的量变量前面加const变常量const为常属性2.const修饰的常变量:常属性的变量不可以用在数组3.#define定义的标识符常量可用于数组intarr[MAX]=......
  • 存储操作
    classMyCache{constructor(isLocal=true){this.storage=isLocal?localStorage:sessionStorage}setItem(key,value){if(typeof(value)......
  • 存储介质还是存储载体,这不是个问题
    在档案领域中,“介质”和“载体”到底有什么区别?能不能混用?这个问题曾经困扰了笔者10几年,直到最近才发觉原来根本不是一个问题。我们先来看两句话: 1、磁盘、光盘、固态硬盘......
  • 分布式存储
    分布式存储红帽旗下有两款分布式存储:Gluster/Cephglusterfs存储不能使用根目录/下面的一级目录,会报错副本机制,数据安全安装安装1台或2台分布式存储系统选择RedHatE......
  • Ceph 对象存储 s3cmd客户端使用、基于负载均衡器实现短视频的业务案例
      客户端(s3cmd)测试数据读写  S3cmdgithub地址:https://github.com/s3tools/s3cmd  RGWServer配置  在实际的生产环境,RGW1和RGW2的配置参数是完全一样的......
  • 对于vector容器中,存储的是int类型,但若不开long long 就ER
    牛客暑期训练1Fdfs鸡玩炸弹人#include<iostream>#include<vector>usingnamespacestd;typedeflonglongll;//计算有炸弹的连通块的数量。在一个连通块内不论......
  • C语言整型在内存中的存储
    前言对于整型家族里的C语言内置数据结构:char,short,intlong来说,都有无符号(unsigned)和有符号(signed)之分。整型家族在内存中都是以补码的形式存在.一、整型家族char:unsig......
  • ESXi 安装 Truenas Core 解决企业共享存储免费方案
    服务器配置创建虚拟机内存最少8+,建议选择32,CPU没啥用,我给了2,硬盘我选择了50G+8T,因为一个虚拟机无法使用两个存储池,所以全部使用非SSD硬盘,自带网卡删除,单独给一个直通网卡,......
  • Rancher 存储卷
    Rancher存储卷一.持久卷创建持久卷,预先在主机上创建好目录。涉及权限问题,自动创建可能失败。                      ......