C++-内存管理
文章平均质量分 62
c++ 内存管理
free1993
这个作者很懒,什么都没留下…
展开
-
堆和栈的区别
分类c++的内存管理:栈上的空间、堆上new的空间、全局变量区。对于一个普通的进程来说,它的内存空间的分布分为:堆区、栈区、BSS、代码段、数据段。BSS(Block started by symbol):存放没有被初始化的全局变量、静态变量。数据区:放的是已经初始化全局变量、常量(const)、静态变量等。代码区:放的是可以执行的机器码。堆:从低位往高位进行空间的扩充,容量是大于栈的。栈:从高位往地位进行空间的扩充,程序中的局部变量、函数的参数值、返回变、函数等存在这个区域。堆和栈的区原创 2021-07-19 12:33:16 · 122 阅读 · 0 评论 -
c++智能指针
背景一般情况下内存空间分为下面几个部分:堆:这一部分一般是暴露给程序员,程序员可以通过new来申请底层的空间的。堆的空间一般是通过new来申请的。堆上面的空间会比较大,但是在申请的过程中可能会出现碎片的问题。栈:这一部分是留给程序的,一般情况下局部变量会放在这一部分空间。堆的空间一般是通过堆帧来进行管理的,这一部分的空间比较小。数据区:放被初始化的局部变量、全局变量等。这里就会发生一个问题,就是程序员在写程序的过程中选择使用new进行堆空间的申请,返回了一个指针,但是这个指针在程序返回的时候,原创 2021-07-19 12:26:48 · 211 阅读 · 0 评论 -
c++内存管理-static allocator
第二节allocator我们将前面说的operator new和operator delete放在一个封装好的类allocator中。类的声明class allocator{private: struct obj{ struct obj* next; }public: void *allocate(size_t); void deallocate(void *, size_t);private: obj* freeStore = nullptr; const int CHU原创 2021-04-20 12:31:41 · 197 阅读 · 0 评论 -
C++内存管理-重载和内存池管理
C++容器的内存分配首先我们得了解C++如何通过new和delete调用构造和析构函数来分配空间。参考c++内存管理-new/delete现在,我们来看在容器里面分配空间,容器是通过统一的接口std::allocator来做的,std::allocator调用的实质上是重载::operator new和::operator delete.重载::operator new和::operator delete.重载有两种方式第一种是在类里面重载。class Complex{ public:原创 2021-04-19 19:02:41 · 300 阅读 · 0 评论 -
c++内存管理-new/delete
c++内存管理 - new/deletenew是c++的分配内存的原语,不可以被重载,它一般用于生成一个类的指针对象。new例子假设我们现在有一个复数类Complex,为了声明这个类的对象。Complex *p = new Complex(1,2);//1表示实部的值,2表示虚部的值。实际上这行代码在编译器里面是有三个动作的首先我们调用malloc函数,分配Complex的内存空间。其次,我们使用static_cast函数将生成的空指针进行强制的转化。最后,我们调用类的构造函数初始化实部和原创 2021-04-19 16:23:52 · 193 阅读 · 0 评论