关于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"