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



