关于C指针范围

时间:2014-04-03 17:12:03

标签: c pointers scope bounds

我有一些通用的问题。

  1. 是否有指针范围包含整个程序?

  2. 是否存在用于访问和操作越界内容的越界指针的程序?任何一个例子?

  3. 可以对所有指针范围应用边界检查而不会导致误报或程序停顿吗?边界检查有哪些缺点?是否存在一些无法应用的程序?

1 个答案:

答案 0 :(得分:1)

  1. 指针在范围方面与其他类型的变量没有区别:全局变量在从声明它们的位置到编译单元结束的范围内(除非它们被局部变量阴影所覆盖)同名)。

    因此,如果将指针存储在具有唯一名称并在编译单元开头声明的全局变量中,则它将在整个编译单元的范围内。

  2. 是的,有缺陷的程序。这样一个程序的一个例子是:

    int main(void) {
        int arr[] = {1,2,3};
        arr[23] = 42;
        return 0;
    }
    
  3. 是的,给定的编译器+ libc组合可以在运行时对指针的所有使用执行绑定检查,这样的检查不会产生误报。缺点是跟踪必要的元数据并实际应用检查的性能成本。它们可以应用于每个程序,但如果程序具有严格的性能要求,则可能不再满足这些检查。