C++核心编程 面向对象

intmain
内存分区模型
代码区:存放函数的二进制代码,有操作系统进行管理的
全局区:存放全局变量和静态变量以及常量
栈区:由编译器自动分配与释放,存放函数的参数值,局部变量等
堆区:由程序员分配和释放,若程序员不释放,则在程序接收的时候由操作系统回收

内存机制:

c++ 中在程序运行前分为全局区和代码区

代码区的特点是共享和只读

全局中存放全局变量、静态变量、常量

常量去中存放const修饰的全局常量和字符串常量

全局区:

全局变量(int a = 10;),静态变量(static int a = 10;),常量(字符串常量以及const修饰的变量:(const修饰全局变量 以及  const修饰的局部变量:不在全局区))



程序运行后
栈区 :存放函数的参数值,局部变量
注意事项:不要返回局部变量的地址,栈区开辟的数据由编译器自动释放

不要返回局部变量的地址
int * func(){
  int a = 10; //局部变量,存放在栈区,栈区的数据在函数执行完后自动释放
  return &a;
}

堆区:堆区开辟数据
int * func(){
//利用new 关键字 可以将数据开辟到堆区
  int * p =new int(10);
// new int (10) 返回的是地址
  //int a = 10; //局部变量,存放在栈区,栈区的数据在函数执行完后自动释放
  return p;
}

1、new 的基本语法
int * func (){
//在对去创建整型数据
//new返回的是 该数据类型的指针

int * P= new int(10);
return p;
}

void test01(){
  int * p = func();
cout << *P <<endl;
//堆区的数据由程序员管理开辟,程序员管理释放
//如果想释放堆区的数据,利用关键字delete
delete p;
}
2、堆区利用new 开辟一个数组
void test02(){
  //创建10整型数据的数组,在堆区(new 返回的是一串连续数组地址空间)
  int * arr =new int[10];

  for (int i= 0; i<10;i++){
  arr[i] = i +100;
  }
  for(int i = 0 ;i< 10;i++){
  cout << arr[i] <<endl;
  }
//释放堆区的数组
delete [] arr
//释放数组的时候,需要加上[]

}

原文地址:https://www.cnblogs.com/gjianli/p/15265092.html