典型C内存空间分布图

  下图是一个典型的C内存空间分布图

 

  这是Linux下32位环境的用户空间内存分布情况

  内核空间  :一部分核心软件独立于普通应用程序,运行在较高的特权级别上,驻留在被保护的内存空间上,拥有访问硬件设备的所有权限

  内存栈区  :存放函数的参数值,局部变量的值等,在程序运行时由编译器自动分配。

  内存堆区  :存放new或者malloc出来的对象。如main函数里面定义的。

  全局静态区    :  存放全局变量,局部静态(static)变量和全局静态变量,初始化的全局变量和静态变量data段,为初始化的全局变量和静态变量放在bss段。

  常量区   :存放一般常量和字符串常量

  代码区   :存放二进制代码,只读,可共享

  C/C++不提供垃圾回收机制,因此需要对堆中的数据进行及时销毁,防止内存泄露,使用free和delete销毁new和malloc申请的堆内存,而栈内存时动态释放。

  

#include <iostream>
using namespace std;

int arr[10];            //数组未初始化,空间开辟在bss段上
int arr2[10] = {1,2,3,4,5,6,7,8,9,10};  //数组已初始化,空间开辟在data段

int main()
{
  int arr3[10];        //空间开辟在栈上面
  int a = 10;          //空间开辟在栈上面

  int *p = new int[10];   //空间开辟在堆上面

  static int data;      //未初始化静态变量,空间开辟在bss段上
  static int data2 = 100;//初始化静态变量,空间开辟在data段上

  return 0;    
}

 

posted @ 2020-09-23 12:50  青团青  阅读(1121)  评论(1编辑  收藏  举报