C++内存空间_内存管理_
内存空间
计算机的内存是一个线性的字节数组,每个字节都有一个唯一的地址。程序在运行时会使用这部分内存来存储各种数据
栈_Stack-内存向低地址方向增长
• 栈由编译器自动分配和释放的内存区域,用于存储局部变量和函数参数。
• 栈内存分配和回收速度快,遵循后进先出LIFO。例如,当一个函数被调用时,其参数和局部变量会被压入栈中(压栈_Push),函数结束时,这些数据会从栈中弹出(弹栈_POP)。
• 栈空间大小有限,如果局部变量过多或者过大,可能造成栈溢出错误。
堆_Heap-内存向高地址方向增长
• 堆是动态分配的内存区域(比如创建对象或数组时),由程序员通过new和delete或者malloc和free函数来控制。
• 堆内存分配和回收速度慢,与栈不同,堆的空间相对较大,但内存分配和释放的开销也较大。通常受限于系统的可用内存。
· 如果在堆上分配了内存,但没有及时释放,就会导致内存泄漏。
全局/静态存储区_Global/Static Storage
• 用于存储全局变量和静态变量。
• 这些变量在程序的整个生命周期内都存在。
• 全局变量和静态变量在程序启动时分配,在程序结束时释放。
常量存储区_Constant Data
• 用于存储常量值,如字符串字面量和常量整型值,这些值在程序运行期间不能被修改。
代码区_Code Segment
• 存储程序的执行代码,这个区域是只读的,用于存储函数体和其他可执行代码。
合理地管理内存是非常重要的,因为不当的内存管理可能会导致内存泄漏、野指针、越界访问等问题。使用智能指针(如`std::unique_ptr`和`std::shared_ptr`)可以帮助自动管理堆内存,减少内存泄漏的风险