典型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; }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM