GCC编译、链接选项

编译选项 GCC 13.3 命令汇总 路径选项 选项 解释 -I<dir> 指定额外的头文件搜索路径 -L<dir> 指定额外的库文件搜索路径...

阅读更多

GNU简介

GNU(GNU’s Not Unix!)是一个由理查德·斯托曼(Richard Stallman)于1983年发起的自由软件项目,旨在创建一个与Unix兼容的操作系统,但完全不含任何Unix代码。GNU项目的目标是开发一个完整的操作系统,但最初缺乏一个可用的内核。直到1991年林纳斯·托瓦兹(Linus Torv...

阅读更多

字节对齐

字节对齐的作用 计算机中内存大小的基本单位是字节(byte),理论上来讲,可以从任意地址访问某种基本数据类型。 但是实际上,计算机并非逐字节大小读写内存,现代计算机系统通常以字(word)为单位来读取和写入内存。一个字的大小通常是4字节(32位cpu)或8字节(64位cpu)。 字节对齐的目的就是提高CPU...

阅读更多

内存布局

在C++中,内存分成4个区: 栈(Stack) 堆(Heap) 数据段(Data Segment) 代码段(Code Segment) 栈 栈区主要存储以下几类数据: 函数的局部变量。 函数参数。 函数返回地址。 编译器生成的额外信息(如变量对齐信息)。 栈区的特...

阅读更多

链接属性

翻译单元 编译器在编译代码时,只会去编译.cpp格式的源文件,并且预编译器会递归的把.cpp所有#include的头文件都拷贝到.cpp文件中去,之后对这个文件再进行编译,生成二进制的.obj文件,然后链接器会将所有的obj文件进行链接,生成最终可执行文件。 所以每一个.cpp文件都是一个翻译单元。 链接属性...

阅读更多

环境相关的预定义宏

操作系统 操作系统 预定义宏 Windows _WIN32, _WIN64 macOS __APPLE__, __MACH__ Linux...

阅读更多

工具库

functional std::bind std::bind接受一个可调用对象,生成一个新的可调用对象来适应原可调用对象的参数列表。 std::bind将可调用对象与其参数一起进行绑定,绑定后的结果可以使用std::function保存。std::bind主要有以下两个作用: 将可调用对象和其参数绑定成一个...

阅读更多

复制消除

复制消除(copy elision) 复制消除是一种编译器优化技术,它的核心思想是避免不必要的对象复制和移动。 当: 从一个函数返回一个值语义的对象; 函数的参数是一个值语义的对象; 时,通常会发生几次复制或移动操作。这些操作会创建额外的临时对象,并调用构造函数、析构函数等,导致降低程序性能。 ...

阅读更多