栈区:存放局部变量,函数的参数,返回值等,由编译器自动分配释放。
堆区:动态分配内存,由程序员分配释放,若程序员不释放,程序结束时由OS回收
全局区(static):存放全局变量和静态变量,程序结束后由系统释放。
代码区:存放常量字符串和代码,程序结束后自动释放。
区别:
栈由系统自动分配,容量小,速度快。堆由程序员申请分配,容量大,速度慢。
数据量小时用栈,较大时用堆,使用动态数组或链表时用堆。
以下是演示代码:
#include<iostream>
using namespace std;
int a, b;
char* p1;
void test(int x, int y)
{
printf("形参: &x:%p, &y:%p\n", &x, &y);
}
int main(void)
{
static int c;
int x, y;
char* p2;
p1 = new char[2];
p2 = new char[2];
printf("栈区: \n");
printf("局部: &x:%p &y:%p &p2:%p\n", &x, &y, &p2);
test(1, 2);
printf("\n堆区: \n");
printf("p1:%p p2:%p\n", p1, p2);
printf("\n全局区: \n");
printf("&a:%p &b:%p &p1:%p &c:%p\n", &a, &b, &p1,&c);
printf("\n代码区: \n");
printf("test:%p main:%p\n", test, main);
delete[]p1;
delete[]p2;
return 0;
}