踩内存问题分析成本较高,尤其是低概率问题困难更大。本文详细分析并还原了两个由于动态库全局符号介入机制(it’s a feature, not a bug)触发的踩内存案例。
踩内存不仅仅是调皮
进程是资源分配的最小单位,线程是cpu调度的最小单位。在同一个进程中各个线程是共用整个进程的地址空间的。
把进程的地址空间比作一张大画布,大家(各个线程)可以从这张大画布中裁剪出来一张张小画布使用,用完归还。每个人借还都在管理员那里登记好即可。同一张小画布也可以小A用完归还后小B使用。大家都遵守规则的情况下是非常和谐的。但是某一天,小A同学突然调皮了一下,在小B借用的小画布上乱涂乱画,甚至踩了个大脚印——这就是踩内存了!每一块画布除了画图区域外还有边框,小A同学如果对边框踩上几脚,归还的时候管理员也会非常无语的。
可以看到,小A的行为不仅仅是调皮了,简直是”恶劣行径”,很可能导致小B同学或者管理员同学”崩溃”大哭。