首页 > 代码库 > c++ 内存分配

c++ 内存分配

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 }

 

c++ 内存分配