编译选项
GCC 13.3 命令汇总
路径选项
选项
解释
-I<dir>
指定额外的头文件搜索路径
-L<dir>
指定额外的库文件搜索路径...
阅读更多
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)
复制消除是一种编译器优化技术,它的核心思想是避免不必要的对象复制和移动。
当:
从一个函数返回一个值语义的对象;
函数的参数是一个值语义的对象;
时,通常会发生几次复制或移动操作。这些操作会创建额外的临时对象,并调用构造函数、析构函数等,导致降低程序性能。
...
阅读更多