最早的C编译器并不检查下标,而最新的编译器依然不对它进行检查。这项任务之所以很困难,是因为下标引用可以作为任意的指针,而不仅仅是数组名。作用于指针的下标引用的有效性既依赖于该指针当时恰好指向什么内容,也依赖于下标的值。结果,C的下标检查所涉及的开销比你开始想象的要多。编译器必须在程序中插入指令,证实下标的结果所引用的元素和指针表达式所指向的元素属于同一个数组。这个比较操作需要程序中所有数组的位置和长度方面的信息,这将占用一些空间。当程序运行时,这些信息必须进行更新,以反映自动和动态分配的数组,这又将占用一定的时间。因此,即使是那些提供了下标检查的编译器通常也会提供一些开关,允许你去掉下标检查。
本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/ALLBLUESEA/archive/2009/12/29/5099572.aspx
C编译器与下标检查
本文探讨了C编译器对数组下标检查的挑战。早期编译器不检查下标,现代编译器虽然能进行检查,但会引入额外开销。文章详细解释了为何下标检查复杂,并介绍了如何通过开关控制是否启用该功能。
2382

被折叠的 条评论
为什么被折叠?



