C/C++的内存分布

1、C/C++的内存分布

在这里插入图片描述
说明:
(1)栈又叫堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的。
(2)内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共 享内存,做进程间通信。
(3)堆用于程序运行时动态内存分配,堆是可以上增长的。
(4)数据段–存储全局数据和静态数据。
(5)代码段–可执行的代码/只读常量。

2、c++内存管理方式

C中可以延用,但C++也有自己的内存管理方式:通过new和delete操作符进行动态内存管理。
(1)new/delete操作内置类型

void  Test()
 {
        //动态申请一个int类型的空间
        int   *ptr4 = new int;
        //动态申请一个int类型的空间并初始化为10
        int   *ptr5 = new int(10);
        //动态申请10个int类型的空间;
        int  *ptr6 = new int[10];

        delete  ptr4;
        delete ptr5;
        delete[]   ptr6;
        }

注意:
申请和释放单个元素的空间,使用new和delete操作符,申请和释放连续的空间,使用new[]和 delete[]。

注意:在申请自定义类型的空间时,new会调用构造函数,delete会调用析构函数,而malloc与free不会。

3、重载全局的new和delete操作符

void* operator new(size_t size){
void *p = malloc(size);
return (p);
}
void  operator delete(void *p){
free(p)'
}

为单个的类重载new[]和delete[]

class TestClass{
pubilc:
       void* operator new[](size_t size);
        void operator delete[](void *p);
        };
  void *TeatClass::operator new[](size_t size){
      void *p = malloc(size);
     return (p);
   }
  void TestClass::operator delete[](void *p){
      free(p);
    }
int  main(void){
      TestClass *p = new TestClass[10];
       delete[] p;
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值