- 论坛徽章:
- 1
|
本帖最后由 irp 于 2015-11-04 12:46 编辑
64bits, gcc -o test test.c -O0, 把int i, 改成int64_t, 就可以死循环。如果不改的话,gcc栈对齐,rbp-8是空出来的,a[10]写了也没用。也可以a[11]。- #include <stdlib.h>
- #include <stdio.h>
- int main(int argc, char *argv[])
- {
- int64_t i;
- int a[10];
- for(i = 1; i <= 10; i++) {
- a[i] = 0;
- }
- printf("terminating %d!\n", (int)i);
- return 0;
- }
- int main(int argc, char *argv[])
- {
- int i;
- int a[11];
- for(i = 1; i <= 11; i++) {
- a[i] = 0;
- }
- printf("terminating %d!\n", i);
- return 0;
- }
复制代码 msvc 2012,64bits release版本, 关闭优化不用改code就可以死循环。
- #include <stdio.h>
- #include <stdlib.h>
- #pragma optimize("", off)
- int _tmain(int argc, _TCHAR* argv[])
- {
- int i, a[10];
- for(i = 1; i <= 10; i++){
- a[i] = 0;
- }
- return 0;
- }
复制代码 |
|