ARP协议
ARP (Address Resolution Protocol),即“地址解析协议”,
用于在一个局域网(LAN)内,将一个已知的IP地址(逻辑地址)解析(翻译)成对应的MAC地址(物理地址)。
当主机A想要给同一局域网内的主机B发送数据时,主机A通常只知道主机B的IP地址(例如,你在ping
192.168.1.101)。但是,数据在局域网内最终是以数据帧的形式传播的...
预备知识
网络字节序
在计算机内存中,当一个数据类型(比如一个 32 位的整数
int)占用多个字节时,就存在一个如何排列这些字节的顺序问题,这就是字节序
(Byte Order) 或 Endianness (端序)。
主要有两种字节序:
小端字节序
(Little-Endian):将数据的低位字节存放在内存的低地址处。这是目前绝大多数本地个人电脑(如
Intel, AM...
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110...
makefile: 用于管理项目。
文件命名:只能是 makefile 或者 Makefile
配置完成后直接使用 make 命令执行
1 个规则:
目标:依赖条件
(一个tab缩进)命令
要求: 目标的时间必须晚于依赖条件的时间,否则,更新目标
依赖条件如果不存在,找寻新的规则去产生依赖条件。
ALL:指定 makefile
的终极目标。(因为makefi...
该条款探讨了一种在特定情况下,可以替代“为左值和右值分别重载”这一常规做法的编码技巧。C++98
的一条重要准则是“避免按值传递用户定义类型”,而该条款则解释了在C++11的移动语义下,这条准则何时可以被“打破”。
当一个函数需要持有其参数的一个副本时(例如,将其存入一个数据成员),在
C++11 中最常见的做法是提供两个重载版本:
一个版本接受 const T&(左值)...
该条款的核心是介绍 C++11 引入的“置入函数”(如 emplace_back, emplace
等),并将其与传统的“插入函数”(如 push_back, insert
等)进行比较。在许多情况下,置入函数比插入函数更高效。这是因为置入函数避免了不必要的复制或移动操作,直接在容器中构造对象,而插入函数则需要先构造对象,然后再将其复制或移动到容器中。
插入函数和置入函数的根本区别在于...
该条款的核心论点是,由于销毁一个可联结(joinable)的 std::thread
对象会导致程序终止,因此开发者必须确保在 std::thread
对象被销毁前,在代码的所有可能路径上都将其变为不可联结状态(设定join()或detach())。
std::thread 的可联结性
(Joinability)
一个 std::thread 对象存在两种状态:
可联结 (J...
该条款的核心论点是,std::thread 和期值(std::future /
std::shared_future)虽然都可以看作是系统线程的句柄,但它们的析构函数行为却截然不同,这种差异对于编写健壮的并发代码至关重要。
对于std::thread, 正如前面所说, 其析构函数的行为非常严格和明确:如果
std::thread 对象是可联结的
(joinable),其析构函数的调用...