c语言开发gc,第10讲GC的C编译器的使用与C语言编程.ppt

第10讲GC的C编译器的使用与C语言编程

第10讲 GCC的使用与Linux进程创建 Linux的程序文件名后缀 GCC编译器 GCC是GNU C Comiler的缩写,是GNU推出的 完全免费、功能强大,支持多种语言(C,C++,FORTRAN,PASCAL,ADA)的编译器。 支持多种硬件平台,执行效率快,比一般的编译器的执行效率高20%~30% 。 GCC编译过程 预处理:调用linux的CPP预编译程序,生成.i的临时文件。 将#include 文件拷贝到要编译的源文件中。 用实际值替代#define文本。 在调用宏的地方进行宏替换。 命令#gcc –E –o test.i test.c或#cpp test.c>test.i 汇编:调用linux的as汇编编译程序,生成.S的汇编文件。 命令#gcc –S test.c 编译:调用linux的cc1编译程序,生成.o的目标文件。 命令#gcc –c test.c 链接:调用linux的ld链接程序,生成最后的可执行文件。 命令#gcc –o test test.c 执行 #./test Gcc的基本用法 Gcc [options] [filenames] Options有如下常用选项: -S:对源程序进行预处理和编译,不进行汇编和链接,自动生成汇编文件。 -c:执行预处理、编译、汇编而不链接,生成.o为后缀的目标文件。通常用于编译没有主程序的子程序文件。 -o output_filename:指定输出文件名为output_filename,不指定时缺省文件名为a.out -g:产生调试信息。 -x:指定待编译程序的语言。如gcc –xc++ test.cpp -O0:不优化。 -O1:第一级优化。允许与-g共用,编译链接过程稍慢。 -O2:第二级优化。特别对于大型程序,可以大幅度提高运行速度。 -O3:第三级优化。与O2的区别在于它允许把函数直接插入到调用的代码处 。 GDB调试器 GDB是GNU自带的调试工具,GDB支持C,C++,Modula-2等。 编译程序时加调试开关 #gcc –g -o test test.c 进入调试状态# gdb test GDB常用命令 GDB其他使用技巧 在GDB下执行shell命令 ( gdb)shell [commandline] 重复上次命令的执行——直接回车 指令级的调试 stepi/nexti(指令级单步执行) disp/x $寄存器(显示寄存器的值) 出错后的调试。程序发生错误时,会在当前目录下产生一个名为core的内存映像文件。 #gdb a.out core 获得帮助 Shell状态下,运行info gdb 或 man gdb GDB状态下,运行(gdb)help或(gdb)help [GDB命令名] Linux中的进程 进程这个概念是伴随着Unix的产生而出现的,Unix之父Dennis Ritchie当初用来发表Unix的论文的时候就提出了用进程的观点来看待整个操作系统,随着操作系统理论的发展,进程作为程序执行的实体和资源分配的单位的观念也在变化。线程的出现,改变了进程的传统概念。但是在linux中,进程仍然保留着传统的意义,它包括四个要素: 程序段。 系统堆栈空间。 task_struct结构(PCB)。 专有内存空间。 Linux中的线程 linux的线程模型是一种一对一模型,也就是每个线程实际上在核心是一个单独的进程,核心的调度程序负责线程的调度。 进程控制块和堆栈 作为描述进程信息,操作系统感知进程存在的进程控制块(PCB),在linux中是由结构task_struct来实现的。task_struct的定义在include/linux/sched.h中给出。 当产生一个的进程时,在内核空间中会分配一个8K的空间来记录新进程的信息,其中包括task_struct结构和为进程分配的内核堆栈,当进程由于系统调用转到内核时,就要切换到该进程的内核堆栈了。 task_struct结构可以被系统中的许多模块访问,如调度程序、资源分配程序、中断处理程序等。由于task_struct结构经常被访问,它常驻内存。 linux进程的创建与执行 linux进程创建用以下系统调用完成: 系统调用fork():父进程的所有资源通过数据结构复制全部给子进程。 fork()用于创建进程。 后增设的系统调用vfork(): 除了task_struct和系统空间堆栈以外的资源全部都通过数据结构指针的复制“遗传”。所以vfork创建的是线程,而不是进程。 系统调用clone():进程的资源有选择地复制给子进程,而没有复制的数据结构(资源如内存空间)通过指针的复制让子进程共享。 用clone既可以创建一个进程,也可以

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值