C++内存管理

一.C++内存分布

要研究C++的内存分布,首先要明白C++的内存是如何分布?
在这里插入图片描述
1.栈(Stack):又叫堆栈,存储非静态局部变量/函数参数/返回值等等,栈是向下增长的。
2.内存映射段:用于装载一个共享的动态内存库,用户可使用系统接口创建共享内存,做进程间通信。
3.堆(Heap)用于程序运行时的动态内存分配(如:malloc,realloc,calloc,new等),堆是可以向上增长的。
4.静态区(Static):包括数据段和代码段,其中数据段用来存储全局数据和静态数据,代码段用来存储可执行代码,只读常量。

malloc、calloc、realloc的区别?

1)malloc的函数原型:void* malloc(size_t size);
2)calloc的函数原型:void* calloc(size_t num,size_t size);
3)realloc的函数原型(要扩充的参数内存大小的指针名,新的大小):
void* realloc(void* memblock,size_t size);
区别:
1)malloc不能初始化所申请的内存空间
2)calloc所申请的空间内容初始化时,如果是为字符类型或整数类型的元素分配内存,那这些元素将保证会被初始化为0;如果是为指针类型的元素分配内存,那这些元素通常会被初始化为空;如果是为实型数据分配内存,则会被初始化为浮点型的0.
3)realloc可以对给定的指针所指的空间进行扩大或缩小,无论是扩大还是缩小,原有的内存中的内容保持不变,当然,新申请的空间的大小如果小于原来的大小,就会导致数据丢失。
4)realloc申请的内存后面还有足够多剩余内存的话,realloc的内存=原来的内存+剩余内存,realloc还是返回原来内存的地址;如果没有足够多剩余的内存,realloc将申请新的内存,然后把原来的内存数据拷贝到新内存里,原来的内存将会被free掉,realloc返回新的内存地址。当给realloc设置的参数指针若为NULL或0时,就相当于malloc的作用。

二.C++内存管理方式

1.new和delete操作内置类型

C++提出了自己的内存管理方式:通过new和delete操作符进行动态内存管理

void Test(){
   
	int *pt1 = new int;//动态申请一个int类型的空间
	int *pt2 = new int(5)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值