程序内存分区
1、栈区(stack): 由编译器自动分配释放,存放函数的参数值,局部变量值等。
2、堆区(heap): 一般由程序员分配释放,随叫随到,挥之即走。
3、全局/静态区(static): 全局变量和静态变量的存储是放在一起的,在程序编译时分配。
4、文字常量区: 存放常量字符串。
5、程序代码区: 存放函数体(包括类的成员函数、全局函数)的二进制代码
使用动态内存的好处: 栈区的空间大小是有限制的,windows 上一般是 1M - 2M 。如果使用堆的话,64 位 windows10 系统的限制是 2G 。
内存泄漏: 是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。
#include<bits/stdc++.h> using namespace std; int num1 = 58; static int num2 = 18; //1.栈的内存 void demo_1(const char* msg) {//函数的参数和局部变量存放在栈区 int x, y, z; } int main() { //4.字符串常量 const char* p1 = "123"; const char* p2 = "321"; //3.全局变量/静态变量 cout << num1 << endl; cout << num2 << endl; //2.堆,动态内存分配 int* q = new int; *q = 10; cout << *q << endl; delete q; //delete后的动态内存禁止访问 return 0; }