撰写于 2022
  • sizeof 和 strlen 的区别

    Saturday, October 15, 2022 在 c++笔记

    更多

  • 内存对齐

    Thursday, October 13, 2022 在 c++笔记

    内存对齐 计算机中内存的地址空间是按照 byte 来划分的, 从理论上讲对任何类型变量的访问, 可以从内存中的任意地址开始, 但实际情况是: 在访问特定类型变量的时候通常在特定的内存地址访问, 这就需要对这些数据在内存中存放的位置进行限制, 各种类型数据按照一定的规划在空间上排列, 而不是顺序地一个接一个地排放, 这就是对齐, 编译器将程序中地每个 数据单元 的地址安排在机器字的整数倍的地址指向的内存之中 为什么要内存对齐 主要是由于 CPU 的访问内存的特性决定, CPu 访问内存时并不是以字 …

    更多

  • 堆与栈

    Thursday, October 13, 2022 在 c++笔记

    更多

  • 变量定义与生命周期

    Thursday, October 13, 2022 在 c++笔记

    作用域 与 生命周期 这两个属性, 以 空间(作用域) 和 时间(生命周期) 两个不同的维度来描述一个 变量 作用域 一个变量可以被引用的范围 全局变量: 全局变量只需在一个源文件中定义, 就可以作用域所有的源文件, 其他不包含全局变量定义的源文件需要用 extern 关键字再次声明这个全局变量 静态全局变量: 与全局变量的区别在于如果程序包含多个文件的话, 它作用域定义它的文件里, 不能作用到其他文件里, 即被 static 关键字修饰过的变量具有文件作用域, 即使两个不同的文件都定义了相同的 …

    更多

  • c++ 内存管理

    Thursday, October 13, 2022 在 c++笔记

    ELF 文件: 可执行与可链接格式(Executable and Linkable Format)是一种用于可执行文件, 目标代码, 共享库和核心转储(core dump)的标准文件格式, 每个ELF文件都由一个ELF header 和紧跟其后的文件数据部分组成, 可以参考 ELF 文件的构成如下: 我们可以看见可执行程序内部都是分段进行存储的. .text section: 代码段, 通常存放已编译程序的机器代码, 一般操作系统加载后, 这部分是只读的 .rodata section: 只读数 …

    更多

  • 智能指针简介与使用

    Wednesday, October 12, 2022 在 c++笔记

    智能指针 为了解决动态内存分配时带来的内存泄露以及多次释放同一块内存空间而提出的 传统的指针在申请完成后, 必须要调用 free 或 delete 来释放指针, 否则容易产生内存泄漏的问题 smart pointer 遵循 RAII 原则, 当 smart pointer 对象创建时, 即为该指针分配了相应的内存, 当对象销毁时, 析构函数会自动释放内存, 需要注意的是, 智能指针不能像普通指针那样支持加减运算(迭代操作) 智能指针的类型 unique_ptr: 独享所有权的智能指针, 资源智能 …

    更多

  • 智能指针的创建

    Wednesday, October 12, 2022 在 c++笔记

    make_unique 和 make_share 优先使用 std:make_unique 和 std:make_shared, 而非使用 new; make_unique: 减少代码量, 能够加快编译速度, 定义两边类型时, 编译器需要进行类型推导, 会降低编译速度, 某些意外情况下可能会导致内存泄漏, 但是 make_unique 不允许自定析构器, 不接受 std:initializer_list 对象 make_shared: 这个主要是可以减少对堆中申请内存的次数, …

    更多

  • 什么是类

    Thursday, April 28, 2022 在 c++笔记

    更多

撰写于 2021
  • c++ 在visual studio和XCode上的差异

    Saturday, September 18, 2021 在 c++笔记

    描述 Visual Studio 和 Xcode 在处理 C++ 方面的主要差异在于它们所使用的编译器、工具链以及它们各自的集成开发环境(IDE)特性。以下是一些关键的不同点: 1. 编译器 Visual Studio 使用的是 Microsoft 的 C++ 编译器(MSVC),该编译器有自己的语法扩展和特性,虽然它也支持大部分的 C++ 标准。 Xcode 使用的是 LLVM/Clang 编译器,这是一个开源编译器,其设计目标之一就是提供清晰的诊断信息,并且它对现代 C++ 标准的支持非常 …

    更多

  • 如何避免写 c 代码的时候 Unhandled Exception:Stack overflow

    Tuesday, March 23, 2021 在 c++笔记

    避免 C 程序出现堆栈溢出异常(Stack Overflow Exception)通常需要注意以下几点 优化递归算法:如果程序中使用了递归,确保递归深度可控,避免无限递归或递归层次过深。 减少局部变量的数量和大小:函数内部声明的局部变量会占用堆栈空间,特别是对于大型数组或结构体。优化代码,尽量减少或优化局部变量的使用。 动态内存分配:考虑使用动态内存分配函数(如 malloc()、calloc()、realloc())来管理大型数据结构,而不是将它们放在栈上。 避免过度递归:如果递归是必须的,确 …

    更多