04 2016 档案

摘要:简单的说就是编译器不同。GNU C提供的功能更多,加入了很多奇奇怪怪的宏(特殊属性声明)来优化编译出来的机器指令。如果你看到类似___XXX()____这样的东东,多半就是GNU C里面定义的。Linux内核的编译用的是GNU C。用GNU C的扩展特性,程序的可移植性会变差。最后一点:GNU C就 阅读全文
posted @ 2016-04-15 15:25 CalvinWang 阅读(336) 评论(0) 推荐(0)
摘要:读芯片的寄存器定义文档的时候,每个寄存器都定义了各自的地址。这个地址看起来和内存的地址是一样一样的。那中间有什么关联呢?其实没啥大的关联,只不过寄存器的地址和内存的地址都是在CPU的寻址空间中。简单的说寄存器的地址指向的就是寄存器,跟其他什么什么的没有关系。访问寄存器的方式和访问内存的方式一样一样的 阅读全文
posted @ 2016-04-11 15:56 CalvinWang 阅读(2491) 评论(0) 推荐(0)
摘要:还记得上一篇在介绍gcc的参数的时候有个超级难搞的-O参数吧。这个参数是设置编译优化的级别的。编译优化的一个假设是我们写的程序会贪婪无度的使用机器的资源,因此编译器会优化汇编代码,提升执行效率。但是带来的代价是可能会出现难以发现的逻辑错误。CPU是从寄存器中取出变量的值,寄存器中的值是从内存中读取出 阅读全文
posted @ 2016-04-11 15:09 CalvinWang 阅读(204) 评论(0) 推荐(0)
摘要:gcc就是用来编译源文件的命令咯,CPU又看不懂源文件。作为这么重要的命令,gcc的参数可以不少的,应该说是巨多。当然了,也可以直接 gcc hello.c hoho。 常用的选项 -c:生成.o文件,就是不连接 (compile) -S:输出汇编语言文件 -E:只做预处理,送往标准输出 (expr 阅读全文
posted @ 2016-04-07 16:02 CalvinWang 阅读(776) 评论(0) 推荐(0)
摘要:读书的时候,C语言课程教的是先写C的代码,然后编译出对象文件,最后链接出可执行文件。那么问题来了,为什么一定要先编译出对象文件呢?难道不能直接编译出可执行文件吗?保持一个有疑问的心才能持续的学习,Linux的世界的知识真是太多,也太有趣了。好吧,回归主题。直接编译出可执行文件是完全可以的!而且稍微分 阅读全文
posted @ 2016-04-06 14:42 CalvinWang 阅读(2084) 评论(0) 推荐(0)