- 内存分为内核空间和用户空间,内核空间由操作系统管理,与程序员没什么关系,我们写的c++程序在用户空间。
用户空间分为栈、堆、数据段和代码段。
栈区存放了程序中的局部变量、函数参数和返回值;
堆区存放了程序中动态开辟内存的变量;
数据段存放程序中的全局变量和静态变量;
代码段存放了可执行程序的二进制代码和常量;
- 栈和堆的区别
(1)管理方式不同:栈是由系统自动管理的,在出作用域时,将被自动释放;堆需要手动释放,如程序中不释放,程序结束时由操作系统回收。
(2)空间大小不同:堆内存的大小受限于物理内存空间;栈一般只有8M。 - 动态分配内存new和delete
使用堆区的内存由四个步骤:
(1)声明一个指针;
(2)用new运算符向系统申请一块内存,让指针指向这块内存;
(3)通过对指针解引用的方法,像使用变量一样使用这块内存;
(4)如果这块内存不用了,用delete运算符释放它;
int* p;
p = new int(5);//申请一块内存,并对内存赋初始值5
cout << "*p=" << *p << endl;
*p = 8;//用解引用的方式把内存重新赋值
cout << "*p=" << *p << endl;
delete p;//释放内存
system("pause");
注意:(1)动态分配出来的内存没有变量名,只能通过指向它的指针来操作内存中的数据。
(2)如果动态分配的内存不用了,必须用delete释放它,否则有可能用尽系统内存
// 一直分配内存不释放内存的后果 案例
for (int i = 1; i > 0; i++)
{
int* p1;
p = new int[100000];//申请一块内存,一次申请100000个int
cout << "p=" << p << endl;
}