Simon's | Blog

Why so serious?

错误声明vector导致的内存越界

"错误声明vector导致的内存越界"

“Better code, better life. ” 错误声明vector导致的内存越界 菜鸡程序员小张今天又写bug了,地址访问越界导致的段错误,下面是gdb给的堆栈信息 (gdb) bt #0 0x00007ffff6542691 in __strlen_sse2_pminub () from /usr/lib64/libc.so.6 #1 0x00007ffff6...

一个dynamic_cast导致的段错误

"一个dynamic_cast导致的段错误"

“Better code, better life. ” 一个dynamic_cast导致的段错误 今天写代码又出bug了 一个意料之外的段错误 下面是core dump的堆栈信息 Program received signal SIGSEGV, Segmentation fault. 0x00007ffff74b0796 in __cxxabiv1::__dynamic_...

Linux网络数据包接受过程

"Linux网络数据包接受过程"

“Better code, better life. ” Linux网络数据包接受过程 先来看一张图 上面这张图描述了Linux内核在接受网络数据包的大概流程。 接收数据包是一个复杂的过程,涉及很多底层的技术细节,但大致需要以下几个步骤: 网卡收到数据包。 将数据包从网卡硬件缓存转移到服务器内存中。 通知内核处理。 经过TCP/IP协议逐层处理。 ...

poll函数源码解析

"poll函数源码解析"

“Better code, better life. ” poll函数源码解析 poll()是Linux系统调用,跟select和epoll组成网络编程中IO多路复用处理函数三兄弟。 基本参数 其声明在头文件poll.h中,函数原型为: int poll(struct pollfd *fds, nfds_t nfds, int timeout); 参数fds是pollf...

Redis复制key

"Redis复制key"

“Better code, better life. ” Redis复制key redis 127.0.0.1:6379> set src.key XXX OK redis 127.0.0.1:6379> get src.key "XXX" redis 127.0.0.1:6379> SCRIPT LOAD "redis.call('SET', KEYS[2],...

CGO入门

"CGO入门"

“Better code, better life. ” CGO入门

使用CLion+WSL搭建Linux开发环境

"使用CLion+WSL搭建Linux开发环境"

“Better code, better life. ” 使用CLion+WSL搭建Linux开发环 适用于 Linux 的 Windows 子系统(英语:Windows Subsystem for Linux,简称WSL)是一个为在Windows 10和Windows Server 2019上能够原生运行Linux二进制可执行文件(ELF格式)的兼容层。 WSL提供了一个由微...

那些不走索引的SQL

"MySql中那些SQL不走索引"

“Better code, better life. ” 那些不走索引的SQL 为了提高查询效率,我们通常会在MySQL数据表建立索引。索引提高查询效率的代价是降低了插入的效率,并且并不是你建立了索引,并且你在SQL中使用到了该列,MySQL就肯定会使用到那些索引的,有一些情况很可能在你不知不觉中,你就“成功的避开了”MySQL的所有索引。 本篇文章会梳理哪些SQL不会使用索引...

使用Valgrind调试Linux C++程序

"Valgrind教程"

“Better code, better life. ” 使用Valgrind调试Linux C++程序 C/C++由于足够底层,并且“相信程序员”,所以性能极高,但带来的负面影响就是,这两门语言对程序员要求更高。因为稍不注意,就会有各种底层问题,比如最常见的内存泄漏。 最近发现一个已经上线的服务的内存使用会随着运行时间不断增长,然后稳定在5GB左右,其实内存增长是预期内的,但...

C++ Traits型别萃取

"C++ Traits编程"

“Better code, better life. ” C++ Traits 假设我们的算法中要声明一个变量,以迭代器所指对象的型别为型别,应该如何实现?毕竟C++只支持sizeof()并不支持typeif()!即便使用RTTI性质中的typeid(),获得的也只是型别名称,不能用来做变量的声明。 解决办法是使用Type Traits(型别萃取)。 型别萃取编程可以说是ST...