删除my_object时会发生什么?执行?是否所有其他内存都被sizeof(MyClass)向左移动了?

cor*_*zza 5 c c++ memory low-level

为了这个问题,我将内存描述为一个简单的字节数组,我将讨论堆内存,因为它可以动态分配它.

让我们说我正在实例化一些类,并在堆上创建一个已经分配了一些内存的对象.然后,在创建对象之后,我分配了更多的内存(可能通过实例化另一个类).当然,这意味着使用newdelete关键字.

内存现在看起来像这样:

... byte byte my_object ... my_object byte byte ...

delete my_object;执行时到底发生了什么?是否所有其他记忆都向左移动sizeof(MyClass)?如果是这样,由谁?操作系统?那么当没有操作系统提供虚拟内存时会发生什么?

NPE*_*NPE 6

不,没有任何改变.相反,内存会碎片化,这意味着您现在在已用内存中间有一个未使用的漏洞.后续分配可能能够重新使用部分或全部内存(假设所请求的字节数足够小以适应该漏洞).

某些语言/环境支持压缩垃圾收集器.允许这样的收集器移动物体,因此如果他们选择可以消除孔.这些方法实现起来很复杂,因为收集器需要知道程序中每个指针的位置.因此,这种类型的收集器更适合于更高级别的语言.