编程语言知识点二
[TOC] 编程语言中的一些基础语法一、结构体中的内存对齐问题 内存对齐就是编译器为了让 CPU 访问内存更快,按照一定的规则将结构体中的数据放置在特定的内存地址上,而不是简单地紧凑排列 1、为什么要进行内存对齐? 主要有两个原因:性能和平台兼容性 性能原因(主要原因): CPU 访问内存并不是一个字节一个字节读取的,而是以“块”(通常是 Word,即机器字长,如 4 字节或 8 字节)为单位读取。 如果对齐: 读取一个 int(4字节)只需要一次内存访问。 如果不对齐: 数据可能跨越了两个内存块,CPU 需要进行两次内存访问,然后通过位移和拼接才能拿到完整数据。这会大大降低效率。 平台原因(移植性): 某些硬件平台(如某些 ARM 架构或早期的 SPARC)要求特定类型的数据必须存储在特定的内存地址上(例如 int 必须在 4 的倍数地址)。如果访问未对齐的地址,可能会导致硬件异常(Crash)。 2. 内存对齐的三大黄金规则在默认情况下(未手动指定对齐系数),编译器遵循以下规则: 规则一:成员对齐结构体中第一个成员的偏移量(Offset)为...
编程语言知识点一
[TOC] 编程语言知识点一一、在main执行之前和之后的操作 在 C++ 程序中,main 函数虽然是程序员编写代码的入口,但并不是程序运行的真正起点,也不是终点。在 main 执行前后,操作系统和 C++ 运行时库(C Runtime Library, CRT)会进行一系列重要的初始化和清理操作。 1、在 main 执行之前的操作(初始化阶段): 在控制权移交给 main 之前,程序主要进行静态资源的初始化和运行环境的准备。 a、所有静态存储期的变量初始化 在 main 之前初始化的:1、全局变量 2、全局 static 变量 3、全局对象 4、全局 static 对象 5、类的 static 成员变量(这个 static 变量属于类,而不是对象) 不在 main 之前初始化的:局部的 static...