c++ 内存构成

在C++中内存分成5个区,分别是堆、栈、全局/静态存储区、常量存储区和代码区。

  1. 栈:就是那些由编译器在需要的时候分配,通常是局部变量、函数参数等。
  2. 堆:一般是new delete    和 malloc free。
  3. 全局/静态存储区:全局变量和静态变量被分配到同一块内存中。
  4. 常量存储区:里面存放的是常量,不允许修改。
  5. 代码区 。

其中:new/delete是C++关键字,调用构造、析构函数,需要编译器支持,返回值为指定类型。malloc/free是库函数,返回值为void*类型,需要头文件支持。New和malloc函数从堆上动态分配内存。new内存分配失败时,会抛出bac_alloc异常,malloc分配内存失败时返回NULL。

对于数据C++定义new[]专门进行动态数组分配,用delete[]进行销毁。new[]会一次分配内存,然后多次调用构造函数;delete[]会先多次调用析构函数,然后一次性释放。如 int *psome = new int [10]; delete [] psome;可以把它当做数组处理,p[0]、p[1]、p[2]分别是其第0、1、2个元素。

 

关于类/对象大小的计算
类的大小与普通数据成员有关,与成员函数和静态成员无关。即普通成员函数,静态成员函数,静态数据成员,静态常量数据成员均对类的大小无影响
虚函数对类的大小有影响,是因为虚函数表指针带来的影响
虚继承对类的大小有影响,是因为虚基表指针带来的影响
空类的大小是一个特殊情况,空类的大小为1
 

你可能感兴趣的:(c++)