最难解的代码问题

由于 C 语言的本身设计非常贴近底层,所以会有一些坑,很容易出问题。回想一下之前遇到的难解问题,大概包括下面几类:

越界访问

死锁

堆栈溢出

Linux 的堆栈是比较小的,32 位系统上是 8KB,64 位系统上是 16KB。所以使用静态变量,长调用栈时要非常小心。

因为堆栈后面会有 Thread 的重要信息,所以堆栈溢出后,很可能看到调用栈都是乱七八糟的。

最近 Linux 内核有计划将堆栈使用的直接映射内存变为虚拟映射内存。这样可以通过映射表检查是否有堆栈溢出访问,堆栈溢出的错误会更容易发现和调试。

多次回收 (Double free)