c++对象存放区域
在C++中,对象的存放位置通常取决于对象的生存周期和分配方式。C++中的对象可以存放在以下几个主要的内存区域:
- 
栈(Stack): - 自动变量和局部对象通常存储在栈上。
- 栈是一种后进先出(LIFO)的数据结构,它由编译器自动管理,当函数调用结束时,栈上的局部对象会自动被销毁。
 
- 
堆(Heap): - 动态分配的对象通常存储在堆上。
- 堆是一种由程序员手动管理的内存区域,使用 new关键字进行分配,使用delete或delete[]关键字进行释放。
 
- 
全局/静态存储区(Static Storage Area): - 全局变量和静态变量(包括静态成员变量)通常存储在全局/静态存储区。
- 这些变量在程序运行期间都存在,直到程序结束才会被销毁。
 
- 
常量区(Constant Area): - 存放常量字符串和全局常量变量。
- 这些数据通常在程序运行期间都存在,不允许被修改。
 
- 
代码区(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;
}
在这个示例中,我们声明了不同类型的变量,并输出它们在内存中的地址。globalVar 和 staticVar 存放在全局/静态存储区,localVar 存放在栈上,ptr 存放在堆上,constStr 存放在常量区。
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号