《高质量C++编程指南》读后笔记四

本文深入探讨了内存管理的三大分配方式及其区别,并列举了常见内存错误及对策。此外还对比了指针与数组的不同之处,解析了指针参数如何传递内存,以及free与delete的区别。最后,文章解释了为何需要同时掌握malloc/free与new/delete。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

七、内存管理

  其实上述许多已经提到的注意要点追根究底的原因就是内存管理的内容,例如返回值是指针类型和引用类型时是否是正确的。在这个部分,或许能更加准确的找到答案。

  1.内存分配方式

    分配方式分三种:从静态存储区分配;在栈上分配;在堆上分配。下面来讨论他们的区别。

    在静态存储区分配:内存在程序编译时候就已经分配完毕,这块内存在程序整个运行过程都存在,主要存放静态变量和全局变量;

    在栈上分配:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时,这些内存单元被释放,这就是为什么不可以将指向或表示栈上内存单元的指针或引用作为结果返回的原因吧;

    在堆上分配:也叫做动态内存分配,程序在运行时利用malloc和new等方法申请的内存都分配在堆上,程序员需要自行利用free或delete将其释放掉,这也就是为什么在函数内利用这两个函数初始化指针时,可以将该指针作为结果返回的原因吧。因为该指针是指向堆空间的,在函数结束后,该内存不会被释放,指针不会成为野指针。

 

  2.常见的内存错误及对策

    第一次用指针的地方,要么利用函数初始化了,要么就赋值NULL。不要什么都不做,就做个声明。

    在delete或free掉指针之后,要将该指针重新置为NULL,防止野指针的使用。

 

  3.指针和数组的对比

    char *p = "hello world !";

    p[0] = 'H';        //这是错误的,"hello world !”是常量字符串,位于静态存储区,内容是不能被改变的。

    指针的大小是4字节

 

  4.指针参数是如何传递内存的?  画图理解。

  5.free和delete把指针怎么了?    简单的说,只是把指针所指的那块内存空间释放了而已。指针本身不变

  6.动态内存会被自动释放吗?   不会,谢谢。不管会不会,总之固定使用new/delete,malloc/free配对就是了。

  7.杜绝“野指针”

 

  8.有了malloc/free 为什么还要 new/delete ?

    new/delete 做的事情比 malloc/free 来的多,多了对象初始化和对象析构,但是 malloc/free 又是必不可少的,因为c++程序缺少不了c程序中唯一管理动态内存的 malloc/free。

    再说了, malloc/free 是库函数, new/delete 是运算法,有定义上的区别。

 

  9.内存耗尽怎么办?

    认真好好写程序,好好对待内存,想耗尽都困难,除非是70年代的电脑。善待 malloc/free  new/delete

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值