1)栈区(stack):由编译器自动分配释放 ,存放函数的 参数值,局部变量的值等。其操作方式类似于数据结 构中的栈。
2)堆区(heap):一般由程序员分配释放,若程序员不 释放,程序结束时可能由OS回收。注意它与数据结构 中的堆是两回事,分配方式倒是类似于链表。
3)全局/静态区(static):全局变量和静态变量的存储是 放在一块的,在程序编译时分配
4)文字常量区:存放常量字符串
5)程序代码区:存放函数体(类的成员函数、全局函数) 的二进制代码
1 #include <iostream> 2 #include <string.h> 3 #include <stdio.h> 4 using std::endl; 5 using std::cout; 6 7 //int a = 0;//全局静态区 8 //char *p1;//全局未初始化 9 int main() 10 { 11 int b;//栈 12 char s[] = "abc";//s数组就在栈 13 char *p2;//栈 14 char *p3 = "123456";//p3本身位于栈,字符串位于常量区 15 static int c = 0;//全局(静态)初始化区 16 p1 = new char[10];//p1 位于全局区,p1指向的对象位于堆区 17 p2 = new char[5]; 18 strcpy(p1, "123456"); 19 20 printf("&a = %p\n", &a); 21 cout<<endl; 22 printf("p1 = %p\n", p1); 23 printf("&p1 = %p\n", &p1); 24 cout << endl; 25 printf("p2 = %p\n", p2); 26 printf("&p2 = %p\n", &p2); 27 cout << endl; 28 printf("&b = %p\n", &b); 29 cout << endl; 30 printf("p3 = %p\n", p3); 31 printf("&p3 = %p\n", &p3); 32 cout << endl; 33 printf("s = %p\n",s); 34 35 cout << endl; 36 *p3 = ‘x‘;//试图修改文字常量区的内容时,引发段错误,这是因为文字常量区的内容是只读的 37 38 cout << "------------------------" << endl; 39 40 system("pause"); 41 return 0; 42 }
时间: 2024-12-28 20:41:07