Cortex-M3-指针和野指针

Cortex-M3-指针和野指针

Cortex-M3-指针和野指针

  • 什么是指针?指针在内存中实际上是一个无符号整数(unsigned int),但是它的值被赋予特殊的解释:表示变量或函数的地址。所以才被形象地称为“指针”,就好像指向谁家似的。在使用指针前,都必须先让它指向有意义的,并且允许由程序使用的实体——数据和代码。而所谓“野指针”,就是指某个指针变量的值因故超出合法的范围,使其“枪口”乱指。程序逻辑错误、数组越界、堆栈溢出、指针未经初始化、对缓存与缓冲的处理不当、多任务环境中的紊乱条件,甚至是恶意地破坏等,都可以制造出野指针。如果使用野指针去读取或修改内存,则被读取或修改的位置是不可预料的。前者导致读回来的都是乱掉的数据,后者则会破坏未知用途的数据。这常常导致系统发生莫名其妙的功能紊乱,严重时会使系统毫无征兆,没有理由地失控、死机。
  • 野指针就像“肉里的刺一般:一个野指针就足以毁掉整个系统,而且极其隐蔽,很难通过症状来找出是哪里存在野指针,甚至都不能判定症状是否因野指针造成(程序大了其它 bug 也很多,并且也能导致相同的症状)。对于通常的单片机系统,是没有任何办法来防止野指针的破坏的,完全靠程序员的素质和自律。但智者千虑,必有一失。尤其是当程序规模变得很大时,复杂度会呈指数上升,千头万绪纠缠不清,就算是谨慎如诸葛亮,聪明如比尔·盖茨的天才,也不敢保证没有漏网之鱼。
  • 因此出现了 MPU 和 MMU.