C++ 内存模型学习笔记

C++ 内存模型从上(高地址)到下(低地址)可以分为以下几个部分: 栈区:由编译器自动分配释放,存放函数的参数值、局部变量的值等。 堆区:由程序员分配释放,若程序员不释放,程序结束时可能由操作系统回收。 全局/静态区:分为 .data 段(全局初始化区)和 .bss 段(全局未初始化区),.data 段存放 已初始化 了的全局变量和静态变量,.bss 段存放 未初始化 的变量。 常量区:就是 .rodata 段,存放常量。 代码区:存放函数体的代码。

2024年06月29日 · 1 分钟 · Cassius0924

HTTP 协议版本变化学习笔记

互联网发展至今,HTTP 协议已经发展了多个版本,分别为 HTTP/1.0、HTTP/1.1、HTTP/2.0、HTTP/3.0,本文将对这几个版本的变化进行学习笔记。 HTTP/1.0HTTP/1.0 是最早的 HTTP 协议版本,它的特点是: 每次请求都会建立一个新的 TCP 连接,请求结束后立即断开连接。 每个请求都会包含完整的请求头和请求体。 不支持持久连接,每次请求都需要重新建立连接。 不支持管道化,即同一个连接中不能同时发送多个请求。 HTTP/1.1HTTP/1.1 是对 HTTP/1.0 的改进,它的特点是: 支持持久连接(Keep-Alive),即同一个连接可以发送多个请求。 支持管道化,即同一个连接中可以同时发送多个请求。但是,由于 HTTP/1.1 中的管道化存在队头阻塞问题,所以很少被使用。默认为关闭状态,并且大多数浏览器也不支持。 所以我们认为 HTTP/1.1 不支持管道化 。 HTTP/1.1 的缺点: 队头阻塞问题:如果一个请求响应时间过长,那么后面的请求就会被阻塞。 明文传输:HTTP/1.1 的数据传输是纯文本且未加密的,容易被窃听。比如状态码 200 会被分为 2、0、0 三个字节传输。这点会在 HTTP/2.0 中得到改进。 头部冗余:每次请求都需要携带完整的请求头,头部信息冗余。 HTTPS在讲述 HTTP/2.0 之前,我们先来了解一下 HTTPS。 HTTPS 是在 HTTP 的基础上加入了 SSL/TLS 加密层,使得数据传输更加安全。HTTPS 的特点是: 数据加密:HTTPS 使用 SSL/TLS 加密传输数据,保证数据传输的安全性。 身份认证:HTTPS 使用证书机制对服务器和客户端进行身份认证,防止中间人攻击。 数据完整性:HTTPS 使用数字签名对数据进行完整性校验,防止数据被篡改。 加密方式:对称加密、非对称加密、数字签名。 通信前使用非对称加密协商对称加密的密钥,通信过程使用对称加密传输数据,保证数据传输的安全性。 HTTP/2.0HTTP/2.0 是对 HTTP/1.1 的重大升级,它的特点是: 头部压缩:HTTP/2.0 使用 HPACK 算法对头部进行压缩,如果请求头中包含相同的字段,只需要发送一次,后续请求只需要发送索引,接着从静态表或动态表中获取对应的值。解决了 HTTP/1.1 中头部冗余的问题。 ...

2024年06月27日 · 1 分钟 · Cassius0924