首页 > 编程语言 >c++对象存放区域

c++对象存放区域

时间:2024-05-24 10:40:27浏览次数:16  
标签:存储 对象 c++ int 存放 全局 静态

在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 存放在常量区。

标签:存储,对象,c++,int,存放,全局,静态
From: https://www.cnblogs.com/whcjob/p/18210139

相关文章

  • C++-函数
    函数(Function):是一个提前封装好的、可重复使用的、完成特定功能的独立代码单元。特点:提前封装、可重复使用的、完成特定功能将针对特定功能的、有重复使用需求的代码,提前封装到函数内,在需要的时候随时调用。基础函数语法return语句执行后,函数立刻结束函数不可定义在mai......
  • Educator:C++面向对象-STL实训
    第1关:病毒复制任务描述本关任务:设计一个病毒类。相关知识本关涉及到的内容如下:拷贝构造函数重载!=和==运算符拷贝构造函数当一个构造函数的唯一一个参数就是它所在类的引用时,这个构造函数就是一个拷贝构造函数编程要求设计一个病毒Virus类,它的内部有一个Gen变量,代表......
  • 浅谈C++函数
    目录一、函数的概念二、调用函数的两个前提三、函数传参的三种形式四、函数返回类型一、函数的概念函数是C++程序的基本模块,通常一个C++程序由一个或多个函数组成。函数可以完成用户指定的任务,一般分为库函数和用户自定义的函数。函数由函数头和函数体组成,函数头中包......
  • .netcore 对象存储帮助类
    说明:1、由于各平台对象存储规则存在细微差异,故在类中对于入参进行处理(使用时需要根据自身情况调整)。2、本文档写于2024年05月24日,由于版本的迭代,可能存在细微差异,可能导致错误,所以推荐下载文档使用NuGet引用版本进行测试。minio对象存储帮助类usingMinio;usingMinio.DataM......
  • Java面向对象-常用类(String 、StringBuffer 、StringBuilder的使用与深入)
    常用类-字符串相关类1什么是StringString是不可变类,即一旦一个String对象被创建,包含在这个对象中的字符序列是不可改变的,直至该对象被销毁。String类是final类,不能有子类。2分类StringStringBufferStringBuilder3String的使用packagecom.qf.string_c......
  • 零基础学Java第二十一天之IIO流之对象流
    IO流之对象流1、对象流1、理解将对象写入到文件,将文件里的对象读取到程序中classObjectInputStream–对象输入流classObjectOutputStream–对象输出流序列化/钝化:程序里的对象写入到文件中反序列化/活化:文件中的对象读取到程序中2、注意对象所属的类......
  • 【C++】两个类的相互引用_c++ 类相互引用
    有时候在设计数据结构的时候,可能会遇到两个类需要相互引用的情形。比如类A有类型为B的成员,而类B又有类型为A的成员。那么这种情形下,两个类的设计上需要注意什么呢?同一文件尝试方案将A和B的定义都放在一个文件中,例如:#include<iostream>classA{public:......
  • C++Linux系统编程——文件和目录操作函数
    stat函数(重要)#include<sys/types.h>#include<sys/stat.h>#include<unistd.h>​intstat(constchar*path,structstat*buf);intlstat(constchar*pathname,structstat*buf);功能: 获取文件状态信息 stat和lstat的区别:   当文件是一个符号......
  • 【C++初阶】—— 类和对象 (上)
    ......
  • C++基础知识学习笔记(2)
    资料来源https://www.bilibili.com/video/BV1et411b73Z/?spm_id_from=333.337.search-card.all.click&vd_source=cc561849591f6a210152150b2493f6f3简单知识点指针作用:通过指针间接访问内存可以通过指针来保存一个地址。指针所占内存空间32位操作系统,占4个字节。64位操......