学习和使用c这些年来,很多方面都未深入研究过,就如脱离了IDE后,我可能连编译一个c文件的命令都写不出来。

最近需要在c中内嵌汇编解决问题,参考网上相关的资料写了一段汇编代码,在测试的时候时好时坏,找了半天也没查到原因。

后来看到一篇提到 O2 编译选项,会自动优化指令,可能会修改内嵌的汇编指令。

我试了一下,把 O2 选项去掉后,重新编译。

测试了很多次,之前出现的问题不再重现了。

难道真的是因为加了 O2 选项的原因吗? 我不能肯定,目前我只能去掉这个 O2 选项。(有人和我一样遇到同样的问题了?  http://www.cplusplus.com/forum/general/20427/)

------------------------------------------------------------------------------------------------------------------

当我去掉了 O2 选项后,我在测试时发现一个新的问题,有时程序会崩溃,错误提示:  异常代码: c00000fd

我分析了一下原因,原来是因为递归调用函数引起的。

奇怪,之前没去掉 O2 编译选项时,一直不会有这个问题。

我写了一个简单的递归调用函数,在开启 O2 选项时,递归调用不会有任何问题,但如果关闭 O2 选项后,基本上递归调用 65000 次后,就崩溃了,栈溢出了。

void digui(int *x, int y, int z)
{
if (*x % == )
{
printf("x:%d\n", *x);
} (*x)++; digui(x, y, z);
} int main(int argc, char *argv[])
{
int iCount = ; digui(&iCount, , ); system("pause"); return ;
}

看来, O2 编译选项对递归调用优化的很智能化。

gcc O2优化选项对内嵌汇编以及函数递归调用的影响的更多相关文章

  1. 测试gcc的优化选项

    一.测试准备及原理 测试代码: static void wait(volatile unsigned long dly) { ; dly--); } int main(void) { unsigned ...

  2. ARM GCC 内嵌汇编手册

    转自:http://blogold.chinaunix.net/u2/69404/showart_1922655.html ARM GCC 内嵌(inline)汇编手册 关于这篇文档这篇文章是本人为方 ...

  3. GCC(警告.优化以及调试选项)

    GCC(警告.优化以及调试选项) [介绍] gcc and g++分别是gnu的c & c++编译器   gcc/g++在执行编译工作的时候,总共需要4步   1.预处理,生成.i的文件 预处 ...

  4. GCC 编绎选项 转

    gcc提供了大量的警告选项,对代码中可能存在的问题提出警告,通常可以使用-Wall来开启以下警告:           -Waddress -Warray-bounds (only with -O2) ...

  5. 不同优化选项对ARM下C语言编译的影响

    我们知道在C语言编译时,有那么几个常用的优化编译选项,分别是-O0,-O1,-O2,-O3以及-Os.之前一直觉得既然是优化选项,顶多是优化一下逻辑,提高一些效率或者减少一下程序大小而已.很少会觉得它 ...

  6. gcc 优化选项 -O1 -O2 -O3 -Os 优先级

    http://hi.baidu.com/xiaole10368/item/7cea9b1369cc240db88a1a5c 少优化->多优化: O0 -->> O1 -->&g ...

  7. gcc 优化选项 -O1 -O2 -O3 -Os 优先级,-fomit-frame-pointer

    英文:https://gcc.gnu.org/onlinedocs/gcc-3.4.6/gcc/Optimize-Options.html#Optimize-Options 少优化->多优化: ...

  8. gcc -O0 -O1 -O2 -O3 四级优化选项及每级分别做什么优化【转】

    转自:http://blog.csdn.net/qinrenzhi/article/details/78334677 相关博客http://blog.chinaunix.net/uid-2495495 ...

  9. GCC 优化选项 -O1 -O2 -O3 -OS 优先级,-FOMIT-FRAME-POINTER(O3的优化很小,只增加了几条优化而已)

    四种编译优化类型的解释: `-O ' `-O1 '                 Optimize.      Optimizing   compilation   takes   somewhat ...

随机推荐

  1. Java集合Collection基本方法

    jdk1.7 api中的方法摘要: 参考java集合大全图:https://www.cnblogs.com/xkzhangsanx/p/10889114.html Collection为List.Se ...

  2. python类的构造函数

    最新的 Python3.7 中(2018.07.13),对类的构造函数进行了精简. from dataclasses import dataclass @dataclass class A: x:in ...

  3. Python学习笔记之将数据写入到文件中

    10-3 访客:编写一个程序,提示用户输入其名字:用户作出响应后,将其名字写入到文件guest.txt 中. 编写Python代码: username = input("Please ent ...

  4. 【转载】Gradle学习 第六章:构建脚本基础

    转载地址:http://ask.android-studio.org/?/article/11 6.1. Projects and tasks 项目和任务Everything in Gradle si ...

  5. Spring之IoC详解(非原创)

    文章大纲 一.Spring介绍二.Spring的IoC实战三.IoC常见注解总结四.项目源码及参考资料下载五.参考文章 一.Spring介绍 1. 什么是Spring   Spring是分层的Java ...

  6. 【爬虫】网页抓包工具--Fiddler--Request和Response

    [爬虫]网页抓包工具--Fiddler Fiddler基础知识 Fiddler是强大的抓包工具,它的原理是以web代理服务器的形式进行工作的,使用的代理地址是:127.0.0.1,端口默认为8888, ...

  7. Redis内存模型(1):内存统计及划分

    1. 内存统计 查看命令:info memory 示例: 部分含义: used_memory: Redis分配器分配的内存总量(单位是字节),包括使用的虚拟内存. used_memory_rss: R ...

  8. C 语言实现回调函数

    优点 不需要改变调用的主函数,只需添加命令和相应函数. #include "stdio.h" #include "stdlib.h" #include &quo ...

  9. 视频合并时使用python批量修改文件名

    不知道大家有没有遇到这样的情况,比如视频合并时文件名没有按照正常顺序排列,像这样 可见,文件名排序是乱的.这个样子合并出来的视频一定也是乱的.所以得想办法把文件名修改一下,让软件读取出正确的顺序.闲话 ...

  10. LCD编程框架组织

    看下面的代码,你会发现韦老师这种组织与内核框架的组织是一脉相承的. led.c #define LCD_NUM 10 static p_lcd_params p_array_lcd[LCD_NUM]; ...