C语言
文章平均质量分 79
Linux内核远航者
探索Linux内核的奥秘,涉及处理器架构,内存管理,进程管理,容器和虚拟化等底层干货分享,当沉浸在庞大的内核源代码中难免会迷失自己,但参透某个子系统的设计思想时又会欣喜若狂,Linux内核远航者乘风破浪,在探索的道路上唯有热爱可抵岁月漫长。
展开
-
C语言的内存分配和段错误的处理
在嵌入式的程序设计中对于程序变量的内存的管理尤为重要,因为嵌入式产品的内存资源十分有限,合理分配内存是程序设计人员最优先考虑的问题。当然,一些变量的内存分配不合理有时会导致程序的崩溃(即是段错误)等错误。本文针对这些问题进行了详细的解析并给予合理的解决方案。首先说下程序和进程: 进程:处于运行状态的程序,需要占据系统资源(内存,cpu,时间片),会参与操作系统的调度,具有生命原创 2016-10-17 21:36:22 · 1346 阅读 · 1 评论 -
gcc的编译流程详解
C语言是编译型的语言,必须经过编译器的编译才能在内存中加载被处理器执行,从C语言的源文件到最终的处理器能够执行机器码,是我们通常所说的”编译“,这是个模糊的概念,实际上需要预处理、编译、汇编、链接四个处理流程,那么编译器在这四个过程中都做了哪些事情呢?实际上,从C语言源码到机器码涉及到C语言、汇编语言、机器语言,即是从从“人可识别”阅读性好的高级语言到机器可识别的低级语言,还好编译器帮助我们做好了原创 2016-10-18 10:00:58 · 789 阅读 · 0 评论 -
函数调用堆栈的汇编解析
大家可能都会做过这个的gcc编译过程:gcc -S test.c -o test.s ,通过这样的编译得到的是我们的汇编代码,打开test.s文件会发现都是我们看不懂的汇编指令。也许我们都想过去看看这些汇编代码是什么意思,可是这些晦涩难懂的汇编代码,又让我们望洋兴叹。我们都知道函数的形参是放在栈区的,函数调用必须需要栈,可是编译器究竟是怎样为我们分配栈区的呢?原创 2017-02-15 10:15:37 · 1221 阅读 · 0 评论 -
C语言可变参数函数
查看printf函数的函数原型,发现形如int printf(const char *format,…)这样的函数声明,不错这就是可变参函数.我们在实际的开发过程中能很少会封装这样的函数,但是我们经常会用到这样的库函数,实际开发过程中当函数的参数事先不能确定下来的时候也需要我们动手封装这样类型的函数.原创 2017-06-16 22:11:33 · 283 阅读 · 0 评论 -
软件工程中调试宏的使用(C语言)
在嵌入式实际的开发中,我们经常会使用printf打印来调试我们的代码,终端查看结果等信息.但是正真的产品发布的时候,我并不希望调试信息被打印出来,这个时候就需要我们屏蔽掉我们用于调试的代码段.原创 2017-06-16 23:01:50 · 739 阅读 · 0 评论