三、C/C++基础知识总结

1、用一段代码来判断机器是16位还是32位的?
可以使用sizeof计算int的字节长度来判断是32位还是16位。

32位机器下:sizeof(int) = 4;16位机器下:sizeof(int) = 2

二:利用最大值

  1. 机器位数不同则表示的数字的最大值是不同的。

    32位机器下int的最大值为2147483647,16位机器下int的最大值是32767

  2. 我们可以利用最大值是否溢出情况来判断

    定义一个变量num赋值32768,如果是16位机器这个时候超过了int最大值变成了-32768,如果是32位机器不会超过
    3、指向变量的指针
    1、int p=&a; // 将p指针指向变量a
    2、指向数组的指针
    int p1[5];
    首先,对于语句“int
    p1[5]”,因为“[]”的优先级要比“
    ”要高,所以 p1 先与“[]”结合,构成一个数组的定义,数组名为 p1,而“int*”修饰的是数组的内容,即数组的每个元素。也就是说,该数组包含 5 个指向 int 类型数据的指针,如图 1 所示,因此,它是一个指针数组。
    3、数组指针
    int (*p2)[5];
    对于语句“int(p2)[5]”,“()”的优先级比“[]”高,“”号和 p2 构成一个指针的定义,指针变量名为 p2,而 int 修饰的是数组的内容,即数组的每个元素。也就是说,p2 是一个指针,它指向一个包含 5 个 int 类型数据的数组,如图 2 所示。很显然,它是一个数组指针,数组在这里并没有名字,是个匿名数组。
    3、指向函数的指针
    int (p)(int i,int j);
    p是一个指针,它指向一个函数,该函数有2个整形参数,返回类型为int。p首先和
    结合,表明p是一个指针。然后再与()结合,表明它指向的是一个函数。指向函数的指针也称为函数指针
    4、内存对齐的优点与内存不对齐的区别
    过内存对齐之后,CPU的内存访问速度大大提升。具体原因接下来解释
    cpu把内存当成是一块一块的,块的大小可以是2,4,8,16 个字节,因此CPU在读取内存的时候是一块一块进行读取的,块的大小称为(memory granularity)内存读取粒度。

我们再来看看为什么内存不对齐会影响读取速度?

假设CPU要读取一个4字节大小的数据到寄存器中(假设内存读取粒度是4),分两种情况讨论:

1.数据从0字节开始
2.数据从1字节开始

解析:当数据从0字节开始的时候,直接将0-3四个字节完全读取到寄存器,结算完成了。

当数据从1字节开始的时候,问题很复杂,首先先将前4个字节读到寄存器,并再次读取4-7字节的数据进寄存器,接着把0字节,4,6,7字节的数据剔除,最后合并1,2,3,4字节的数据进寄存器,对一个内存未对齐的寄存器进行了这么多额外操作,大大降低了CPU的性能。
5、进程间的通信方式
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值