C/C++内存管理
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C/C++内存管理,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2055字,纯文字阅读大概需要3分钟。
内容图文
一、C/C++内存分布
计算机的内存是通过分区来进行管理的,但我们主要要了解的有四个区域,分别是:栈去、堆区、数据段(也叫静态区)、代码段
栈区:栈是一种先进后出的结构,非静态局部变量/函数参数/返回值一般存在这个区域,栈是向下增长的,函数传参时参数从右到左进栈;
堆区:用于动态开辟内存空间,堆是向上增长的;
静态区:存储静态变量和全局变量;
代码段:存储程序的可执行代码和只读常量;
二、C语言中动态内存管理方式
1.malloc/ realloc/ calloc/ alloca
malloc:在堆上分配内存,但没有进行初始化,返回值类型是void *,在使用时要进行类型转换;如果申请失败会返回NULL,使用完成需要释放,否则会造成内存泄漏;
alloca:向栈申请内存,不需要释放;
calloc:会初始化内存,设置为0;
realloc: 对内存大小进行增加或缩小;
三、C++内存管理
C++提出自己的内存管理方式:通过new和delete操作符进行动态内存管理。
1.new/delete操作内置类型
例:
int* p1=new int; //动态申请一个int类型空间
int* p2=new int(3); //动态申请一个int类型空间并初始化为3
int* p3=new int[5]; //动态申请3个int类型的空间
delete p1;
delete p2;
delete[ ] p3;
注:申请和释放单个内存空间,使用new和delete操作符;申请和释放连续的空间,要使用new[ ]和delete[ ]
2、new和delete自定义类型
class A
{
public:
A( )
:_b(0)
{
cout<<"A( ):"<<this<<endl;
}
~A( )
{
cout<<"~A( )"<<this<<endl;
}
private:
int _b;
}
void A1( )
{
A* p1=(A*)malloc(sizeof(A)); //申请一个A类型的空间
free(p1);
A* p2=(A*)malloc(sizeof(A)*5); //申请5个A类型的空间
free(p2);
}
void A2( )
{
A* p3=new A; //申请一个A类型的对象
delete p3;
A* p4=new A[5]; //申请5个A类型的对象
delete p4;
}
注:在申请自定义类型的空间时,new会调用构造函数,delete会调用析构函数。
3.operator new和operator delete函数
new和delete是用户进行动态内存申请和释放的操作符,operator new和operator delete是系统提供的全局函数,new在底层调用operator new全局函数申请空间,delete在底层通过operator delete全局函数来释放空间。
4.new和delete的实现原理
1 内置类型
如果申请的是内置类型的空间,new和malloc,delete和free基本相似
2.自定义类型
new的原理:
- 调用operator new函数申请空间
- 在申请的空间上执行构造函数,完成对象的构造
delete的原理:
- 在空间上执行析构函数,完成对象中资源的清理工作
- 调用operator delete函数释放对象的空间
内容总结
以上是互联网集市为您收集整理的C/C++内存管理全部内容,希望文章能够帮你解决C/C++内存管理所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。