C语言基本知识

C语言数据类型

大致分为整型和浮点型,整型包括char, unsigned char, short,unsigned short,int,unsigned int, long int, long long int;浮点型包括float,double等,在内存中的字节数不同。

C语言常量

大致分为字面常量,宏常量,const修饰的变量,称为常变量,宏常量,枚举常量,字符常量和字符串常量。
其中需要注意的是宏常量只是替换作用,而且没有分号,常变量是开辟了空间,枚举类型里面都是整数,不能是小数。

C语言的编译链接过程

大致分为预处理,编译,汇编,链接,预处理作用是展开头文件/宏替换/去掉注释/条件编译(test.i main .i)编译作用检查语法,生成汇编 ( test.s main .s)汇编作用是将汇编代码转换机器码 (test.o main.o)链接作用链接到一起生成可执行程序 (test.exe或者a.out)
预编译,编译,汇编统称为编译,预编译主要是替换,生成行号和文件索引,用于后来编译遇到问题时产生错误提醒;编译生成符号,符号的作用就是用来标记,链接的时候可以通过符号找到对应的值进行匹配,汇编形成二进制可重定位文件,用于链接时的定位不同的文件,链接通过可重定位文件形成二进制可执行文件,最终形成执行文件。需要注意的是,二进制可重定位文件是针对单个文件的,链接时的二进制可执行文件是针对多个文件的,这样符号就可以不同的文件中进行映射和匹配,链接过程如下:
在这里插入图片描述
其中,.text段存放一些文本信息,比如指令等,符号存在.symtab文件中,被初始化的数据存放在.data文件中,未被赋值的全局变量会被存放在.com段,表示可能会被同名替换,初值为零的static变量会被存放在.bss段,实际上两个段的地址是一样的,因为他们相当于初值都是零,运行的时候可能会改变。

虚拟地址空间

上图有一个概念是虚拟地址空间,虚拟地址空间是程序执行时用到的空间。提到虚拟地址空间就不得不提出以下几个概念,如图所示,其中CPU是用来进行计算的,磁盘是用来进行存储的,内存是硬件提供的,读取速度很快但是容量有限,如果物理内存不够,Linux系统中还会有一个虚拟内存的概念,它是利用磁盘空间虚拟出的一块逻辑内存。用作虚拟内存的磁盘空间被称为交换空间,换句话说是在磁盘中开辟的,而虚拟地址空间是操作系统提供的,为程序运行提供的地址空间,是不存在的,操作系统让程序以为自己在一段连续的空间中运行,因为如果程序在内存中直接运行,可能会造成内存不够,使用效率低,所以引入了这个概念。Linux系统为每一个进程提供一个单独的虚拟地址空间,里面有不同的分段,虚拟地址通过也表映射到真实的物理地址。32位系统的虚拟地址空间是4G,因为它的最大寻址空间是2的32次方。
在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值