C/C++ 对sizeof返回值类型不了解带来的陷阱
对C/C++程序员来说,sizeof可以说再熟悉不过,sizeof是一个 C/C++中的运算符,在编译阶段计算并返回一个对象或数据类型所占用的内存大小(单位: 字节)。sizeof看起来简单,但是对它不了解很容易在代码中留下陷阱。比如:当传入一个表达式给sizeof时,它只会返回表达式计算结果的类型大小,但它不会对表达式求值。
对C/C++程序员来说,sizeof可以说再熟悉不过,sizeof是一个 C/C++中的运算符,在编译阶段计算并返回一个对象或数据类型所占用的内存大小(单位: 字节)。sizeof看起来简单,但是对它不了解很容易在代码中留下陷阱。比如:当传入一个表达式给sizeof时,它只会返回表达式计算结果的类型大小,但它不会对表达式求值。
阅读本文需要对TCP/IP协议簇和linux系统有一定了解。
RPC (Remote Procedure Call):一个计算机通信协议,基于扩展常规或本地过程调用的概念。因此被调用过程不必与调用过程存在于同一地址空间中。这两个进程可能位于同一系统上,也可能位于不同的系统上,并通过网络连接它们。程序员就像调用本地程序一样,无需额外地为这个交互编程(无需关注细节)。
上图表示两个联网系统之间 RPC 调用流程。客户端进行过程调用,向服务器发送请求并阻塞等待,直到收到答复或请求超时。当请求到达时,服务器执行对应的请求过程,并将执行结果发送给客户端。客户端收到应答消息后被唤醒继续运行。
qcow2 是一种虚拟磁盘镜像格式,全称是 “QEMU Copy-On-Write version 2”。它可以用一个文件的形式来表示一块固定大小的块设备磁盘。
动态分配:qcow2 支持按需分配空间,不会立即占用所有磁盘容量,而是随着数据写入逐渐扩展大小,节省存储空间。
支持快照:qcow2 格式允许创建快照。
压缩和加密:qcow2 格式支持对数据进行压缩以减少磁盘空间,并可以启用AES加密来保护镜像数据的安全。
写时复制(Copy-On-Write, COW):这意味着只有在镜像文件上有新的写操作时,才会实际改变文件内容,这样可以更高效地使用磁盘空间。
1 | // 动态申请资源后忘记释放 |
在使用传统指针时,需要手动分配和释放内存,这可能会导致内存泄漏(未释放已分配的内存)或释放后的野指针(指向已释放的内存)。智能指针通过自动内存管理来帮助解决这些问题,确保在不再需要内存时自动释放它。
1 | class Shape |
运行上面代码发现,矩形和圆求出的面积都为0,与我们预期不符合,这是为什么呢,原因在于使用静态编联。
前言:在早期C/C++中auto关键字的作用是:一个存储类型指示符,使用auto修饰的变量,存储类型为自动存储期,从变量声明处生命周期开始,出变量所在代码块生命周期结束,并且全局变量不能用auto修饰。但是局部变量的生命周期本来就是进入作用域生命周期开始,出作用域生命周期结束。导致用auto修饰局部变量和不使用auto修饰没有任何区别,处于一个尴尬地步。