3.19
操作系统
为什么0.1 + 0.2 不等于 0.3
也就是计算机只能近似的表达0.1、0.2,两个近似值相加是得不到准确值的,存在精度误差
为什么负数用补码表示
例如int类型, 第一位表示正负数 0- 正 1 - 负,其它31位表示数据
因为不用补码的话加减之前得判断一次,负数+整数改为负数减正数
也就是和正数相加统一
十进制小数转化为二进制
小数点前半部分(除二取余) + 小数点后半部分(乘二取整)
8.625 - 1000.101
按照此逻辑0.1就不能用计算机精确表达出来啦,只能表达近似值
计算机小数存储方式
浮点数,即小数点可以浮动
科学小数计数法哈哈
符号位 + 指数位 + 尾数
指数位为无符号整数, 实际指数 + 127
float: 1 + 8 + 23
内核
连接应用与硬件之间的桥梁
能力:进程调度;内存管理;硬件通信能力;系统调用;
内存被操作系统分为用户态和内核态
用户态:只能访问用户空间;内核态:可以访问内核空间
用户可以通过系统调用由用户态进入到内核态
linux
多任务:
并发(单核时间片) + 并行(多核)
SMP(对称多处理)
CPU地位对等,权限相同
ELF(可执行文件链接格式)
由来,编译、汇编、链接
执行时装载到内存,CPU取址执行
Monolithic Kernel(宏内核)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XRw6fBcU-1647611536868)(E:/typora/3.19.assets/image-20220318091507802.png)]
宏内核,linux的内核,本质上是一个拥有最高权限的可执行程序,系统内核所有模块都运行在内核态
另一种,微内核,把一些功能实现放在了用户态,实现了模块之间的解耦,提高操作系统的稳定性
混合
Windows
PE(ELF)
HYBRID KERNRL
计网
TCP连接建立
C++
常量指针和指针常量
常量指针:指针的指向可以改,指针指向的值改不了
函数指针
定义:指向函数的指针变量;在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针指向的地址。
函数赋值给函数指针时不用取址
栈与堆的区别
栈:用来保存局部变量和函数参数,函数参数从右到左入栈,是为了方便C++可变参数的特性,可变参数一般放在最后一个参数,而在栈里,数据放置是从高地址到低地址,从右往左放的话可变参数就被放在高地址(不懂)
malloc / free 和 new / delete区别
用法 new int(5), malloc(size)哈哈,new还可以new自定义对象
new实际上执行两个过程:1 分配未初始化的空间(malloc) 出现异常,就报std:bad_alloc错误
2 使用对象的构造函数对空间进行初始化,返回空间的首地址;出现异常就delete释放内存
delete:1 调用析构函数 2 回收内存空间
malloc 对于非内置数据类型调用不了他们的构造析构函数
volatile三个特性
易变性:保证程序每次读取volatile修饰的变量时都是从内存中重新读取,不会使用上一条语句读取的寄存器中的变量的内容
不可优化性:告诉编译器,不要优化我
顺序性:能保证顺序不被优化
extern
extern int i告诉编译器在同一项目下其他文件有定义i,相对于include节省时间
extern "C"指明函数的调用规范,extern “C” int foo()
预编译 - 编译 - 汇编 - 链接
Leetcode
一道没做
Linux 网络编程看了几集,pthread_join回收子线程资源或者pthread_detach
pthread_cancel,取消线程,到了取消点(系统调用)才终止
也可以改变线程属性达到pthread_detach目的 pthread_attr_init一系列函数
线程同步:为正常运转需要互斥量等措施
define和const区别
其他
必须要抽丝剥茧,看看你所选模型的分布函数是啥样的阿西吧,是不可压缩模型还是可压缩模型?马赫数计算公式
妈蛋都要飞起来了Ma数(特征速度除以格子速度)
时间步长不变,空间步长增大,格子速度增大,马赫数减小
时间步长增大,格子速度减小,马赫数增大
onst区别
其他
必须要抽丝剥茧,看看你所选模型的分布函数是啥样的阿西吧,是不可压缩模型还是可压缩模型?马赫数计算公式
妈蛋都要飞起来了Ma数(特征速度除以格子速度)
时间步长不变,空间步长增大,格子速度增大,马赫数减小
时间步长增大,格子速度减小,马赫数增大
马赫数会变化本身是不是有点奇怪,按道理格子空间步长应该都为1呀,格子声速不变,特征速度也不变