2024-1-14 C++薄弱知识点整理

一.

1.给类型起别名: typedef 原名 别名;

       可用于给代码更换平台:先定义别名,在代码中使用别名,这样,在移植到其他平台时,可以更换原名(用于应对linux和win的,如long等类型的,字节数不一致问题)

注:给类型起别名不是简单地展开替换字面代码,而是限定了别名就是原类型

    宏定义才是字面代码层面的展开替换

二.代码的链接和编译原理

1.编译过程

1)预编译:处理 #开头的命令(#pragma.lib ,#pragma.link例外,这两个属于链接阶段)

2)编译:gcc,g++ -0

3)汇编

最后生成二进制可重定位文件 .obj

.o文件的格式组成

  elf文件头

 .text

 .data

 .bss

.symbal

 .section table

    ...

 .

2.链接过程:编译完成的所有.o文件+静态库文件(.o  .a  .lib)

1)所有.o文件段的合并,符号表合并后进行符号解析

        所有对符号的引用,都要找到该符号定义的地方(例如错误:符号未定义,符号重定义);

符号解析成功后-->给所有符号分配虚拟地址

2)符号的重定向

        把符号的地址写入指令中

链接完成之后,形成可执行文件:

  .exe

  .out

   -o 可执行程序的名称

注:1)符号什么时候分配虚拟地址?

 链接过程第一步,符号解析完成后

2) .out和 .o文件的异同

同:都由各种段组成

异: .out的 program headers段有两个load 告诉系统: 运行程序时,把数据段和代码段加载到内存中

.out文件在磁盘上的组成

elf header //程序的入口地址

profram headers //告诉系统,加载.text和 .data

 .text

 .data

 .bss

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值