在栈上的变量,必然是连续分配的,再加上向上或向下增长,这只是一种实现假定,尽管某些编译器确实是这样做的,但并不是所有编译器都会这样做,因为标准也没规定编译器必须这样分配变量,那是编译器的自由,编译器可能会察觉这样的漏洞,采取预防措施,那些措施未必是我们所知道的(比如跳过一些间隙分配,踏入间隙读写即触发系统保护机制,谁知道编译器设计者会怎么做),也不需要知道,只要规规矩矩地写出不越界的代码即可,越界之后有什么现象,与你无关,研究它不见得你是高手。
程序员最忌的就是假定太多,假定这假定那,一到现实不满足那么多假定,这程序就越容易崩溃和不切实用。假定调用者不出错就是一个隐患很大的假定,现实中指望别人不出错,把正确的东西交给你处理,那也太容易做人了。这种思维不纠正,苦头有得你吃。任何程序的编写都有这样那样的假定,但自己必须很清醒地知道到底作了哪些假定,并充分论证过这些假定是无害和适用的,才能在这些假定的基础上写程序,一旦忘记了这些假定前提,写出来的程序就会有千奇百怪的运行时问题,那才是程序员最头痛的东西,程序员一辈子都在跟这些错误打交道,一个不给自己的产品包终身的厂家,如何在市场上立足,真以为程序员很风光么,那样的生涯闷死你。
这个其实也正犯了编程规范中不要给内存照X光片的戒条,试图解析内存的细节,殊不知不全然是那样的,个别适用的模型并不普遍,那样的经验有什么用呢。
[
本帖最后由 TonyDeng 于 2013-8-13 00:51 编辑 ]