C/C++指针、数组与内存管理(三)

关于C/C++的内存管理,博主发现一篇博文已经总结的很好了。内存管理

这里做几点总结:

(1)函数体内的局部变量保存在栈上, 但栈的内存容量有限,在Linux下可以使用ulimit -s查看栈的内存容量。在程序中注意不要超过这个值。当相应的范围结束时,局部变量就不能在使用。

(2)使用malloc/new等动态内存分配函数,内存从堆上获得。

(3)动态内存的生存周期可以由自己决定,但问题也多。使用完毕后一定要使用free/delete函数将申请的内存释放,并将指针指向NULL,避免产生野指针。

(4)程序中频繁使用malloc/new等动态内存分配函数,容易产生内存碎片,对程序稳定性产生不利影响。

(5)malloc/new申请的一定是一块连续的内存,申请的内存可能比实际申请的大,也可能申请不到。最好分配之后判断一下是不是为NULL

(6)使用free等释放指针时,一定要传递指针起始地址,否则将导致申请的部分内存不能被释放,这个称为内存泄漏

(7)使用malloc内存申请成功后,最好使用memset函数对申请的内存清零

(8)野指针,野指针是指指针变量没有被初始化,指针变量free后没有指向NULL,指针操作超越了变量的作用范围,内存越界等。野指针的出现是非常危险的。

(9)禁止释放或函数内返回非动态申请的内存(栈中的内存,函数中的局部变量等)

(10)使用malloc/new等方式动态分配内存,速度一般比较慢。

由上可知,不合理的使用指针造成的后果将是非常危险的。但某些情况下使用指针也将带来极大的便利,在c语言中也有很多情况不得不使用指针,不能因噎废食,就是使用指针时一定要小心小心再小心。在c++中,我们可以使用引用运算符、string类型等方式尽量避免使用指针。

c++ string类型简介

string类定义隐藏了字符串的数组性质,string类能够自动处理字符串的大小,而不用担心数组太大导致内存浪费或者太小导致数组越界。

string类的初始化:

string test = "hello world"

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值