目标文件里有什么

1.   .text段是代码段,比如main程序就存放在这里; .data段存放已初始化的数据而且初始化不为0;.bss段存放未初始化或初始化为0的数据(英文含义:以符号开始的块),在这里我们引发出几个问题:

(1)我们都知道.bss段不占空间,它到底不占哪里的空间?   虚拟地址空间还是文件空间?

答案是文件空间,因为对于.bss段来说,分配空间的意义只局限于虚拟地址空间,因为它在文件中并没有内容。而在仅生成.o文件时,.bss是不占.o文件空间的,在以后的链接过程中,链接器会为目标文件分配虚拟地址和空间。

(2).c到.exe过程中有多少个文件产生?为什么?(有解决待)

2.程序从编写到执行经过哪些过程?

一、预编译   生成.i文件(windows下)

(1)展开头文件  (2)替换#define   (3)删除注释 (4)添加行号  (5)保留#pragma  (6)删除宏:#if #endif等

二、编译       生成.s文件

词法分析,语法分析,语义分析,代码优化等

三、汇编 生成.o文件,也就是目标文件

将代码汇编成机器指令

四、链接 生成.exe文件

(1)符号解析  (2)符号重定位  (3)分配地址空间

3.目标文件和可执行文件都是elf格式的文件(linux下)

4..bss段少了哪个变量?为什么会少了这个变量?

答案是未初始化的 全局变量,它也是一种弱符号,所以所占空间大小未知,因为有可能其它编译单元中该符号所占的空间比本编译单元该符号所占的空间大,(比如char *str = ...我们并不知道),所以编译器此时无法为该弱符号在BSS段分配空间,我们将它标记为COMMON类型的变量。

5.怎么知道.bss段的信息?

ELF头段里有.bss段的信息

6.在局部变量未初始化时,地址是0xcccccccc,原因是访问了内核空间,它是无效值

7.强符号:已初始化的全局变量;弱符号:未初始化的全局变量

8.C语言中强弱符号规则:

两个强符号,报错;一强一弱,取强符号;两个弱符号,由编译器决定   

强弱符号是有针对性的。

9.若定义char *p = "hello world";

hello world存储在只读数据段.rodata

10.头文件里放的是声明

11.main参数:int main(int argc,char **argv,char **envp)

12.Linux : user space:3G   knel space:1G

      Windows                  3                            1

                                         2                            2

13.ZONE_DMA   大概16M  不经过寄存器

     ZONE_NAMAL   常用部分   16~896M

     ZONE_HIGHMEN                 896M~结束

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@所谓伊人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值