C++学习之路——第一天(结构体、C++程序从编写到运行)

引子:兜兜转转还是你~

C++数据类型

int 占用 4 个字节(32 位机)

char 占用 1 个字节(8 位机)

short 占用 2 个字节(16 位机)

long 占用 4 个字节(32 位机)

float 占用 4 个字节(32 位机)

double 占用 8 个字节(64 位机)

long double 占用 16 个字节(64 位机)

define 和 const 的区别

define 在编译预处理过程中把所有的符号常量替换为所指定的字符序列,它没有类型,在内存中并不存在以符号常量为名的存储单元,它只是简单的字符串替换,因此它没有数据类型,也就没有存储单元。

const 具有变量的特征,它有数据类型,需要占用存储单元,存储单元中存放的是不可变的常量值。

结构体内存对齐

struct S1
{
    char a;
    int b;
    char c;
} s1;
struct S2
{
    char a;
    char c;
    int b;
} s2;

sizeof(s1)=12, sizeof(s2)=8

结构体默认的字节对齐一般满足以下三点:

1、结构体变量的首地址能够被其最宽基本类型的成员变量整除

2、结构体每个成员相对于结构体首地址的偏移量是该成员类型大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal alignment)。

3、结构体总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节(trailing alignment)。

C++程序是如何运行的

C++程序从编写完成到生成可执行文件(exe)需要经过以下几个阶段:

预处理(Preprocessing):预处理器负责处理源代码中的预处理指令,如#include、#define 和#if 等。预处理器将替换源代码中的宏定义和条件编译,生成一个预处理后的源文件(通常为.i 文件)。

编译(Compilation):编译器将预处理后的源文件转换为目标代码,通常是汇编代码(.s 文件)或者机器代码。在这个过程中,编译器会检查语法错误并对代码进行优化。

汇编(Assembly):汇编器将编译器生成的汇编代码转换成目标代码文件(通常是.obj 或.o 文件)。目标代码文件中包含了程序的机器指令、符号表(用于后续链接)以及重定位信息(如全局变量的地址)。

链接(Linking):链接器负责将一个或多个目标代码文件连接成一个可执行文件(如.exe 或.elf)。在这个过程中,链接器会解析符号表并处理外部引用,将不同的目标代码文件中的同名符号合并,还会将执行环境(如 C 运行时库)所需的代码和数据添加进可执行文件。

加载(Loading):当运行可执行文件时,加载器会将可执行文件从磁盘加载到内存中,并为其分配运行时资源,如内存和文件描述符。接着,操作系统将控制权交给程序入口点(main 函数),程序开始执行。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值