摘要: #include <stdlib.h> #include <ucontext.h> #include <stdio.h> int main() { ucontext_t uc; int a = 2, b = 3; getcontext(&uc); printf("asdafa"); int k = 阅读全文
posted @ 2024-04-22 10:40 hellozhangjz 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 先打印出某个地址,然后阻塞(getchar())进程,查一下进程的 id,然后执行Linux 命令pmap {pid} 查看进程的空间布局(MAC 使用vmmap {pid}),将之前打印的地址对应到某一段。 using namespace std; #define FUCK(x) cout << 阅读全文
posted @ 2024-04-15 14:20 hellozhangjz 阅读(5) 评论(0) 推荐(0) 编辑
摘要: 调用过程 call f :将当前指令(call)的下一条指令地址压栈,然后跳转到 f 函数。 f 函数初始化:将 rbp 压栈(保存调用者的 rbp),为了返回 main 函数时 rbp 寄存器指向正确的位置。将 rsp 赋值给 rbp,这是 f 函数的栈底。 返回过程 f 过程完了之后。 pop 阅读全文
posted @ 2024-04-01 20:22 hellozhangjz 阅读(3) 评论(0) 推荐(0) 编辑
摘要: ikcp_input 先从下层协议将数据读出来,并将对应的包头信息解析出来,根据不同的包头命令进入不同的处理逻辑。 int ikcp_input(ikcpcb *kcp, const char *data, long size) { IUINT32 prev_una = kcp->snd_una; 阅读全文
posted @ 2024-03-15 20:41 hellozhangjz 阅读(40) 评论(0) 推荐(0) 编辑
摘要: KCP 协议是一种可靠的传输协议,对比 TCP 取消了累计确认(延迟 ACK)、减小 RTO增长速度、选择性重传而非全部重传。通过用流量换取低时延。 KCP 中最重要的两个数据结构IKCPCB和IKCPSEG,一个IKCPCB对应一个 KCP 连接,通过这个结构体维护发送缓存、接收缓存、超时重传时间 阅读全文
posted @ 2024-03-15 15:28 hellozhangjz 阅读(228) 评论(0) 推荐(0) 编辑
摘要: 主键索引:表的主键为 B+Tree 的 key。 二级索引:二级索引的 value 是表的主键,这样做的好处是 B+Tree 的节点小,可以一次放入更多节点到内存,减少 IO 次数。缺点是需要回表:通过二级索引查到的主键,再去主键索引查需要的信息。 聚簇索引:索引结构和数据一起存放的索引,InnoD 阅读全文
posted @ 2024-03-08 10:57 hellozhangjz 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 1、互斥量 可以确保同一时间只有一个线程访问临界区,防止出现竞态条件。 2、原子操作 std::atomic<int> mutex(1); 对原子变量的操作是线程安全的。 3、读写锁 std::shared_mutex mutex; // 读者:共享锁定 mutex.lock_shared(); m 阅读全文
posted @ 2024-03-07 19:56 hellozhangjz 阅读(58) 评论(0) 推荐(0) 编辑
摘要: Iterator Traits 萃取出 Iterator 的性质:迭代器种类、迭代器所指数据类型、迭代器距离类型、迭代器所指数据引用、迭代器所指数据指针。根据不同的迭代器种类可以采取不同的算法策略。但是用iter::interator_categotry、iter::value_type、iter: 阅读全文
posted @ 2024-03-07 13:28 hellozhangjz 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 创建数据库 CREATE DATABASE NAME; 创建表 # 中括号[]是可选的意思,命令中不带中括号 CREATE TABLE table_name ( column1 datatype [NULL or NOT NULL] [DEFAULT 默认值] [AUTO_INCREMENT PRI 阅读全文
posted @ 2024-03-07 10:42 hellozhangjz 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 内存管理 使用物理内存,不安全。 交换: 运行时把进程载入内存,不运行时放回磁盘。利用基址寄存器和界限寄存器计算动态地址。没法动态分配堆内存。 覆盖: 把程序分为很多段,先装入段0,运行完段0再装入段1,有空间就放在段0上边,否则就覆盖段0。 虚拟内存:让程序只有一部分被调入内存的情况下运行。 动态 阅读全文
posted @ 2024-02-29 13:46 hellozhangjz 阅读(3) 评论(0) 推荐(0) 编辑