0%

C++五大内存分区

  1. 栈区(Stack)
    • 栈区用于存储函数的局部变量、函数参数、函数调用时的返回地址以及函数调用过程中的上下文信息。
    • 栈区是由编译器自动管理的,它的大小和生命周期都是由程序的函数调用情况决定的。
    • 栈区中的数据是连续存储的,变量的内存分配是按照后进先出(LIFO)的原则进行的。
  2. 堆区(Heap)
    • 堆区用于存储程序动态分配的内存,即通过 newmalloc 等运算符或函数进行的内存分配。
    • 堆区的内存空间通常由程序员手动管理,需要在不需要使用时手动释放,否则可能会导致内存泄漏。
    • 堆区的数据是不连续存储的,变量的内存分配是动态的,可以根据程序需要进行分配和释放。
  3. 全局区/静态区(Static/Global)
    • 全局区用于存储全局变量、静态变量、常量和字符串常量。
    • 全局区在程序启动时就会被分配,并在程序结束时释放,它的生命周期与整个程序的生命周期相同。
    • 全局区中的数据是静态分配的,变量的内存分配是固定的,不会随着函数的调用而改变。
  4. 常量区(Constants)
    • 常量区用于存储程序中的常量,例如字符串常量。
    • 常量区的数据是只读的,不能被修改。
    • 常量区通常是放在静态存储区域中的,因此也被称为静态常量区。
  5. 代码区(Code)
    • 代码区用于存储程序的可执行代码,包括函数的机器代码和指令。
    • 代码区通常是只读的,不能被修改。
    • 代码区在程序启动时就会被加载到内存中,因此也被称为只读存储区。