一、程序的内存布局:
1)栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量值等。其操作方式类似于数据结构中的栈。
2)堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收,它与数据结构中的堆是两回事,分配方式类似与链表。
3)全局/静态区(static):全局变量和静态变量存储是放在一块的,在程序编译时分配。
4)文字常量区:存放常量字符串
5)程序代码区,存放函数体(类的成员函数,全局函数)的二进制编码
二、程序示例:
int a=0;//全局初始化区
char *p1;//全局未初始化区
int main()
{
int b;//栈
char s[]="abc";//栈
char *p2;//栈
char *p3="123456";//字符串位于常量区,P3位于栈
static int c=0;//全局静态初始化区
p1=new char[10];//p1位于全局区,p1指向的对象位于堆
strcpy(p1,"123456");
}
三、栈和堆的比较:
1、申请方式:(栈是由系统自动分配int p;,堆是要由程序员申请int *p2=new int(10);,p2本身是在栈当中)