c++对象存放区域

在C++中,对象的存放位置通常取决于对象的生存周期和分配方式。C++中的对象可以存放在以下几个主要的内存区域:

  1. 栈(Stack)

    • 自动变量和局部对象通常存储在栈上。
    • 栈是一种后进先出(LIFO)的数据结构,它由编译器自动管理,当函数调用结束时,栈上的局部对象会自动被销毁。
  2. 堆(Heap)

    • 动态分配的对象通常存储在堆上。
    • 堆是一种由程序员手动管理的内存区域,使用 new 关键字进行分配,使用 deletedelete[] 关键字进行释放。
  3. 全局/静态存储区(Static Storage Area)

    • 全局变量和静态变量(包括静态成员变量)通常存储在全局/静态存储区。
    • 这些变量在程序运行期间都存在,直到程序结束才会被销毁。
  4. 常量区(Constant Area)

    • 存放常量字符串和全局常量变量。
    • 这些数据通常在程序运行期间都存在,不允许被修改。
  5. 代码区(Code Area)

    • 存放程序的代码段。
    • 这部分区域通常是只读的,存放程序的二进制代码,不能被修改。

示例:

#include <iostream>

int globalVar = 10; // 存放在全局/静态存储区

int main() {
    int localVar = 20; // 存放在栈上
    int* ptr = new int(30); // 存放在堆上

    const char* constStr = "Hello"; // 存放在常量区

    static int staticVar = 40; // 存放在全局/静态存储区

    std::cout << "Addresses:" << std::endl;
    std::cout << "globalVar: " << &globalVar << std::endl;
    std::cout << "localVar: " << &localVar << std::endl;
    std::cout << "ptr: " << ptr << std::endl;
    std::cout << "constStr: " << (void*)constStr << std::endl;
    std::cout << "staticVar: " << &staticVar << std::endl;

    delete ptr; // 释放堆上的内存

    return 0;
}

在这个示例中,我们声明了不同类型的变量,并输出它们在内存中的地址。globalVarstaticVar 存放在全局/静态存储区,localVar 存放在栈上,ptr 存放在堆上,constStr 存放在常量区。

posted @   ponder776  阅读(72)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示