【发布时间】:2011-12-08 03:24:14
【问题描述】:
当我运行以下 C 代码时,我会得到不同的输出,具体取决于代码是否在启用优化 (gcc -O) 的情况下运行。
#include <stdio.h>
int main()
{
int b = 55;
int a[2] = {4, 5};
int index;
printf(" index a[index]\n ");
printf("==================\n ");
for(index = 0; index < 6; index++)
{
printf("%2d%12d\n", index, a[index]);
}
return 0;
}
我知道在 C 中越界访问索引只会访问从数组更向下的堆栈内存(假设为该索引分配了足够的堆栈空间,否则会出现段错误),因为数组只是 C 中的指针. 但是优化对此有何影响?
【问题讨论】:
-
您基本上是通过越界读取来读取堆栈。在正常构建中,您将看到 55 被打印(b 的值),但在优化构建中,b 被删除,因此您看不到它。
标签: c optimization