微软C&C++编译器选项.html

gcc:

cl → 编译

link → 链接

文件编译过程:预处理、编译、汇编、链接

预处理:处理预处理器指令,如#include、#define,生成预处理后的文件(.i)

编译:将预处理后的文件转换成汇编语言代码,进行语法检查和语义分析,生成汇编文件(.s)

汇编:将汇编文件转换成目标文件(.o)

链接:将目标文件和其他依赖项链接成可执行文件。

链接器是将编译后的目标文件(obj文件)链接成可执行文件(exe文件)的工具

obj 文件格式 → coff , exe 文件格式 → PE

编译器有警告程度, /w+数字 设置编译器警告成都 /w4最严格

/p 就是只替换,不编译

winhex能读取内存

小端序(Little Endian)和大端序(Big Endian)

小端序

在小端序中,低位字节存放在低地址,而高位字节存放在高地址。比如,一个32位整数0x12345678的存储方式如下:

地址      | 0x00 | 0x01 | 0x02 | 0x03 |
内容      | 0x78 | 0x56 | 0x34 | 0x12 |

大端序

在大端序中,高位字节存放在低地址,而低位字节存放在高地址。比如,同样一个32位整数0x12345678的存储方式如下:

地址      | 0x00 | 0x01 | 0x02 | 0x03 |
内容      | 0x12 | 0x34 | 0x56 | 0x78 |

主要区别

  1. 存储顺序不同:小端序将低位字节存放在低地址,而大端序将高位字节存放在低地址。

  2. 系统架构:不同的系统架构可能采用不同的字节序。比如,x86架构通常采用小端序,而某些RISC架构可能采用大端序。

  3. 数据传输:在网络数据传输中,通常使用大端序(也称为网络字节序),以保证数据在不同系统间的一致性。

优缺点

  • 小端序优点:对于一些低级语言或系统编程,当操作低位字节时,小端序可能更为方便,因为低位字节位于较低地址,直接访问。

  • 大端序优点:大端序在以人为可读形式观察数据时更为直观,因为高位字节在前。

补充:

在相同的架构下(如x8664),不同的操作系统之间,字节序一般不会改变。x8664架构标准采用小端序(Little Endian),因此,无论运行的是Windows、Linux、macOS还是其他操作系统,这些操作系统在x86_64架构下都会遵循小端序的存储方式。

具体来说:

  • Windows(x86_64):小端序

  • Linux(x86_64):小端序

  • macOS(x86_64):小端序

因此,在相同的x86_64架构上,不同的操作系统之间字节序保持一致,都是小端序。这保证了在这些操作系统之间进行数据交换时,数据的字节序不会引起兼容性问题。

需要注意的是,虽然x86_64架构统一使用小端序,但在一些特定情况下,如与网络协议相关的数据传输,可能会需要将数据转换为网络字节序(大端序)进行传输,然后在接收端再转换回小端序进行处理。

端序列举

不同芯片架构有不同的字节序,以下是一些常见芯片架构及其默认字节序:

小端序(Little Endian)

  1. x86 / x86_64

  • 常见于Intel和AMD处理器,广泛应用于个人计算机和服务器。

  • 采用小端序。

  1. ARM(部分配置)

  • ARM处理器可以配置为小端序或大端序,但大多数情况下默认使用小端序。

  • 常见于智能手机、平板电脑和嵌入式系统。

  1. MIPS(部分配置)

  • MIPS处理器也可以配置为小端序或大端序,但大多数情况下默认使用小端序。

  • 应用于嵌入式系统和网络设备。

大端序(Big Endian)

  1. SPARC

  • 由Sun Microsystems(现为Oracle)开发,常见于高性能服务器和工作站。

  • 采用大端序。

  1. PowerPC(部分配置)

  • 由IBM、Motorola和Apple开发,常用于旧版Mac电脑和游戏机(如任天堂GameCube、Wii)。

  • 大多数情况下采用大端序,但也可以配置为小端序。

  1. IBM System/370 及其后续型号

  • 常用于大型机和高性能计算。

  • 采用大端序。

可配置端序(Bi-Endian)

一些处理器架构支持在小端序和大端序之间切换,这种架构被称为可配置端序(Bi-Endian):

  1. ARM

  • 虽然默认是小端序,但可以配置为大端序。

  • 应用于各种嵌入式系统和移动设备。

  1. MIPS

  • 支持在小端序和大端序之间切换。

  • 广泛应用于嵌入式系统和网络设备。

  1. PowerPC

  • 可以在小端序和大端序之间配置。

  • 应用于嵌入式系统、游戏机和服务器。

shell的重定向:

helloworld.exe > 1.txt  # 将标准输出重定向到 1.txt
helloworld.exe >> 1.txt  # 将标准输出追加到 1.txt
helloworld.exe 2> error.txt  # 将标准错误重定向到 error.txt
helloworld.exe > output.txt 2>&1  # 将标准输出和标准错误都重定向到 output.txt

如果helloworld里是打印helloworld,就会打印到文件里