new/delete/free store和malloc/free/heap组合

asa*_*app 0 c++ memory-management

new/delete 关键字是使用免费商店

malloc/free 关键字是使用堆

我看到写在某处new使用malloc.怎么会这样?它们不用于内存段?

第二,我看到写在某个地方free后我们不能使用newdelete之后使用malloc.但如果new使用malloc为什么free不起作用?

我们freenewect 之后使用的地方'.这是错误还是未定义的行为?

谢谢

Lig*_*ica 6

new/ delete关键字是使用免费存储
malloc/ free关键字是使用堆
我看到写在某处new使用malloc.怎么会这样?它们不用于内存段?

C++中的"免费商店"这个术语描述了动态存储持续时间对象所在的位置."堆"这个词对于同一件事来说是一种口语.new可以使用malloc,那没关系.

但是,它也会执行其他操作,例如调用构造函数,并且可能代替malloc使用其他内存管理系统(例如内存池).

是的,它未free分配给您分配的对象new,主要是因为free不调用类析构函数.同样地,对于delete你创造的东西malloc:这样做会混合两种不同的分配/构造习语,虽然你可以使它起作用,但是这样做非常困难.

为什么这个内存段有两个名字?

因为"堆"(甚至不是"内存段")可能不是堆,所以它是一个愚蠢的术语.C++试图通过引入抽象"免费商店"来逐步淘汰它.不幸的是,人们不断说"堆"是因为(a)遗产,(b)复制猫自行车,(c)忽视抽象的目的/意义/价值,以及(d)教育/教学不良.

  • 此外,*它不是内存段*.它只是一个自由记忆的抽象名称,无论它来自何处或是否都来自同一个地方. (2认同)
  • @asafapp:因为人很傻,世界很大.那里有一些错误的信息. (2认同)