c语言中的动态内存管理:
为什么存在动态内存管理?
首先我们的常量和变量要么在代码段,数据段或者栈上,但是开辟的空间有两个缺点:
我们已经掌握的内存开辟方式有:
int val = 20;//在栈空间上开辟四个字节
char arr[10] = {0};//在栈空间上开辟10个字节的连续空间
但是上述的开辟空间的方式有两个特点:
2.内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信。
3. 堆用于程序运行时动态内存分配,堆是可以上增长的。
4. 数据段–存储全局数据和静态数据(数据段的静态区)。特点:在上面创建的变量直到程序结束才会被销毁
5. 代码段–可执行的代码(正文)/只读常量。(函数体(类成员函数和全局函数)的二进制码)
如下图:
class Test
{
public:
Test()
: _data(0)
{
cout<<"Test():"<<this<<endl;
}
~Test()
{
cout<<"~Test():"<<this<<endl;
}
private:
int _data;
};
void Test()
{
// pt现在指向的只不过是与Test对象相同大小的一段空间,还不能算是一个对象,因为构造函数没有执行
Test* pt = (Test*)malloc(sizeof(Test));
new(pt) Test; // 注意:如果Test类的构造函数有参数时,此处需要传参
}
malloc/free和new/delete的区别
malloc/free和new/delete的
共同点是:
都是从堆上申请空间,并且需要用户手动释放。
不同的地方是:
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- awee.cn 版权所有 湘ICP备2023022495号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务